我有一个清单
word_list = ['cat', 'dog', 'rabbit']
。
我想使用列表理解来打印列表中的每个单独字符,但删除任何重复的字符。这是我的代码:
word_list = ['cat', 'dog', 'rabbit']
letter_list = [""]
letter_list = [letter for word in word_list for letter in word if letter not in letter_list ]
print(letter_list)
这返回
['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']
,这不是所需的结果['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']
,我不明白为什么。
当您从列表理解中引用
letter_list
时,它指的是列表理解之前的 letter_list
的内容,即 [""]。相反,您可以使用一套。
letter_list = {letter for word in word_list for letter in word}
这给出了不按特定顺序排列的唯一字母。
特别是列表理解与
不同word_list = ['cat', 'dog', 'rabbit']
letter_list = [""]
for word in word_list:
for letter in word:
if letter not in letter_list:
letter_list.append(letter)
等效的就是
word_list = ['cat', 'dog', 'rabbit']
letter_list = [""]
temp_letter_list = [""]
for word in word_list:
for letter in word:
if letter not in letter_list:
temp_letter_list.append(letter)
letter_list = temp_letter_list
注意使用临时列表来表示列表理解。
您无法通过列表理解来做到这一点,因为
letter not in letter_list
指的是 letter_list
的原始值。它不会随着您的进行而更新,因为在列表理解完成之前,letter_list =
分配不会发生。
使用普通的
for
循环,以便您可以随时更新。
letter_list = []
for word in word_list:
for letter in word:
if letter not in letter_list:
letter_list.append(letter)
列表非常乐意保留重复项。所以,把它做成一套。
word_list = ['cat', 'dog', 'rabbit']
letter_list = list({letter for word in word_list for letter in word})
print(letter_list)