使用字典的键和值进行迭代

Iterate using keys and values of a dictionary

我有一个字符串(string = 'OBEQAMXITWA'),我想将它添加到一个空列表中,总是满足一个条件。某个字母不应该在字符串的确定位置,而是在其他位置。例如,字母 A 不应位于 5 位置,而应位于任何其他位置。如果满足此条件,我将字符串追加到列表中;如果没有,我就不追加了。

string = 'OBEQAMXITWA'
if 'A' != string[5] and ('A' in string[0:5] or 'A' in string[6:len(string)]):
        word_list.append(string)

另一方面,我想检查字母 Z 是否不在位置 6True,但只有在 Z 时我才会添加处于位置 6 以外的任何其他位置。在这种情况下,Z 不在字符串中,所以我不会将它添加到列表中。

我想迭代地执行此操作,定义一个字典 (letter:position) 并检查添加到字典中的所有字母和位置。例如,手动执行此操作的整个代码如下所示:

string = 'OBEQAMXITWA'

word_list=[]

letter_change_pos = {'A':5,'T':3,'Z':6}

if 'A' != string[5] and ('A' in string[0:5] or 'A' in string[6:len(string)]):
    word_list.append(string)
if 'T' != string[3] and ('T' in string[0:3] or 'T' in string[4:len(string)]):
    word_list.append(string)
if 'Z' != string[6] and ('Z' in string[0:6] or 'Z' in string[7:len(string)]):
    word_list.append(string)
    
print(word_list)

我如何使用 for 循环 执行此操作?

def check_list(test_string, position_dict):
    word_list = []
    for key, value in position_dict.items():
        if key != test_string[value - 1] and (key in string[0:value-1] or key in string[value:]):
            word_list.append(test_string)
    return word_list


if __name__ == '__main__':
    string = 'OBEQAMXITWA'

    letter_change_pos = {'A': 5, 'T': 3, 'Z': 6}

    print(check_list(string, letter_change_pos))

我不太确定标题“使用字典的键和值进行迭代”与您的问题有什么关系。

您可以编写一个函数来检查字符串中的每个字符,如下所示:

def check_invalid_character_positions(string, invalid_positions):
    for idx, char in enumerate(string):
        if invalid_positions.get(char) == idx:
            return False

    # Now check that the characters in invalid_positions are present
    # elsewhere in the string
    return not set(invalid_positions).difference(string)

像这样使用它:

>>> string = 'OBEQAMXITWA'
>>> invalid_positions = {'A': 5, 'T': 3, 'Z': 6}
>>> if check_invalid_character_positions(string, invalid_positions):
...     word_list.append(string)

根据 this comment 你也可以在技术上用我认为的正则表达式来做到这一点,但那会更复杂。

题目要求(1)循环字典中的每个字符,(2)检查字符是否在字符串中而不在指定的索引中,(3)如果是,则将字符串追加到列表中, (4) 否则,不要附加字符串。

使用循环的快速解决方案可以是:

# The required string to check.
string = 'OBEQAMXITWA'
# Create an empty list.
wordList = []
# The dictionary rules for the string.
letterChangePos = {'A': 5, 'T': 3, 'Z': 6}

# Loop on each character of the dictionary.
for key in letterChangePos.keys():
  # Check if the character is in the string.
  if (key in string):
    # Check if the key is not the same as the character in the specified index.
    if (key != string[letterChangePos[key]]):
      wordList.append(string)

# Print the list.
print(wordList)

使用综合列表方法,解决方案是:

# The required string to check.
string = 'OBEQAMXITWA'
# The dictionary rules for the string.
letterChangePos = {'A': 5, 'T': 3, 'Z': 6}

wordList = [
  string for key in letterChangePos.keys()
  if ((key in string) and (key != string[letterChangePos[key]]))
]

# Print the list.
print(wordList)