使用带有“if”的列表理解来创建不重复的项目列表

问题描述 投票:0回答:3

我有一个清单

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']
,我不明白为什么。

python list-comprehension
3个回答
2
投票

当您从列表理解中引用

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

注意使用临时列表来表示列表理解。


1
投票

您无法通过列表理解来做到这一点,因为

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)

0
投票

列表非常乐意保留重复项。所以,把它做成一套。

word_list = ['cat', 'dog', 'rabbit']
letter_list = list({letter for word in word_list for letter in word})
print(letter_list)
© www.soinside.com 2019 - 2024. All rights reserved.