我有一个字符串列表,每个字符串有一个或多个单词。我需要从这个列表中列出一个独特的单词。我可以很容易地用两个嵌套的循环来完成,但我不明白为什么我不能用一个集合理解得到同样的结果。
嵌套循环:
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'}
为什么我不能从设定的理解中得到同样的结果?
你的既定理解不太对。
您有:
{word for word in re.split("\s|[-'/]", item) for item in items}
你的意思是:
{word for item in items for word in re.split("\s|[-'/]", item)}
第一个版本在re.split中的word(“\s[-'/]”,item)的表达式中使用了
item
的前一个值,该值必须为“acid white”
。
如果在一个理解中有多个
for
部分,则应将定义变量的部分(item
)放在使用变量的部分(re.split(“\s[-'/]”,item)
)之前。
我不明白嵌套for循环是如何工作的。正在执行升序程序,请逐步解释它的工作原理 输出: 之后:
本文向大家介绍Python 语言嵌套集合,包括了Python 语言嵌套集合的使用技巧和注意事项,需要的朋友参考一下 示例 导致: 而是使用frozenset:
假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合。 我想在最深的对象上迭代,并对其应用相同的代码。 命令式的方法是微不足道的,但有没有一种方法来完成这一切? 我可以看到如何从最深的循环中生成lambda: 但我能做得更多吗?
嵌套循环,顾名思义就是在循环里面还有循环。外层循环会不断的触发内层循环直到外层循环结束。当然,你仍然可以使用 break 可以终止外层或内层的循环。 样例 11-20. 嵌套循环 #!/bin/bash # nested-loop.sh: 嵌套 "for" 循环。 outer=1 # 设置外层循环计数器。 # 外层循环。 for a in 1 2 3 4 5 do ec
问题内容: 我在Scala和Java之间遇到编译问题。 我的Java代码需要一个 我的scala代码有一个 我收到编译错误: 似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以隐式转换为Iterable。除了遍历scala集合并手动进行转换之外,我还能做些什么使这些类型起作用? 问题答案: 应该弃用恕我直言。您最好使用来明确说明转换的时间和地
我有三个实体主题、主题和类别。在检索包含主题和主题的所有类别时,如何预取每个实体的id和名称列?我不需要其他字段,因为它会影响性能。