0

我有一个字符串列表,每个字符串都有一个或多个单词。我需要从这个列表中列出一个独特的单词列表。我可以用两个嵌套循环轻松做到这一点,但我不明白为什么我没有使用集合理解得到相同的结果。

嵌套循环:

import re

items = ['17th C White', 'Accra White', 'Acid White']

word_list = set()
for item in items:
    for word in re.split("\s|[-'/]", item):
        word_list.add(word)
print(word_list)

嵌套循环的结果(正确):

{'White', 'Acid', 'Accra', '17th', 'C'}

集合理解:

import re

items = ['17th C White', 'Accra White', 'Acid White']

word_list = {word for word in re.split("\s|[-'/]", item) for item in items}
print(word_list)

集合理解的结果(不正确):

{'White', 'Acid'}

为什么我从集合理解中没有得到相同的结果?

4

1 回答 1

1

你的集合理解不太正确。

你有:

{word for word in re.split("\s|[-'/]", item) for item in items}

你的意思是:

{word for item in items for word in re.split("\s|[-'/]", item)}

第一个版本在表达式中使用 的先前值item,该值必须是。"Acid White"for word in re.split("\s|[-'/]", item)

如果您for在一个理解中有多个部分,则应将定义变量的部分 ( item) 放在使用变量 ( re.split("\s|[-'/]", item)) 的部分之前。

于 2021-04-05T15:17:43.677 回答