列表理解中的双重迭代

新手上路,请多包涵

在 Python 中,您可以在列表推导中拥有多个迭代器,例如

[(x,y) for x in a for y in b]

对于一些合适的序列a和b。我知道 Python 列表推导的嵌套循环语义。

我的问题是:理解中的一个迭代器可以引用另一个吗?换句话说:我可以有这样的东西:

 [x for x in a for a in b]

其中外循环的当前值是内循环的迭代器?

例如,如果我有一个嵌套列表:

 a=[[1,2],[3,4]]

列表理解表达式是什么来实现这个结果:

 [1,2,3,4]

?? (请只列出理解答案,因为这是我想知道的)。

原文由 ThomasH 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 628
2 个回答

哎呀,我想我找到了答案:我没有足够注意哪个循环是内部的,哪个是外部的。列表理解应该是这样的:

 [x for b in a for x in b]

获得所需的结果,是的,一个当前值可以是下一个循环的迭代器。

原文由 ThomasH 发布,翻译遵循 CC BY-SA 4.0 许可协议

假设您有一个充满句子的文本,并且您想要一个单词数组。

 # Without list comprehension
list_of_words = []
for sentence in text:
    for word in sentence:
       list_of_words.append(word)
return list_of_words

我喜欢将列表理解视为水平拉伸代码。

尝试将其分解为:

 # List Comprehension
[word for sentence in text for word in sentence]

例子:

 >>> text = (("Hi", "Steve!"), ("What's", "up?"))
>>> [word for sentence in text for word in sentence]
['Hi', 'Steve!', "What's", 'up?']

这也适用于发电机

>>> text = (("Hi", "Steve!"), ("What's", "up?"))
>>> gen = (word for sentence in text for word in sentence)
>>> for word in gen: print(word)
Hi
Steve!
What's
up?

原文由 Skam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题