当前位置: 首页 > 知识库问答 >
问题:

集合理解与嵌套循环

阚小云
2023-03-14

我有一个字符串列表,每个字符串有一个或多个单词。我需要从这个列表中列出一个独特的单词。我可以很容易地用两个嵌套的循环来完成,但我不明白为什么我不能用一个集合理解得到同样的结果。

嵌套循环:

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'}

为什么我不能从设定的理解中得到同样的结果?

共有1个答案

於德馨
2023-03-14

你的既定理解不太对。

您有:

{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和名称列?我不需要其他字段,因为它会影响性能。