问题描述
我有一个字符串列表,每个字符串都有一个或多个单词。我需要从这个列表中列出一个独特的词。我可以使用两个嵌套循环轻松完成,但我不明白为什么使用集合推导式无法获得相同的结果。
嵌套循环:
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','Acid White']
word_list = {word for word in re.split("\s|[-'/]",item) for item in items}
print(word_list)
集合推导的结果(错误):
{'White','Acid'}
为什么我没有从集合推导中得到相同的结果?
解决方法
你的套路理解不太对。
你有:
{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)
) 之前。