【问题标题】:Iterating over first iteration in Python在 Python 中迭代第一次迭代
【发布时间】:2014-08-04 10:13:12
【问题描述】:

是否有单行或 Pythonic(我知道前者不一定暗示后者)的方式来编写以下嵌套循环?

for i in some_list:
    for j in i:
        # do something

我试过了

import itertools
for i,j in itertools.product(some_list,i):
    # do something

但我得到一个“分配错误之前的参考”,我认为这是有道理的。到目前为止,我一直无法找到这个问题的答案......有什么建议吗?谢谢!

【问题讨论】:

  • 使用列表补全,它将用作在线而不是 Python 方式的循环。
  • @Lafada:嵌套列表推导式并不是 Python 式的(它们可能难以阅读), 无论如何,使用列表推式来处理副作用绝对是非 Python 式的。跨度>

标签: python loops for-loop nested iteration


【解决方案1】:

如果您想依次遍历some_list 中的每个子列表,您可以使用itertools.chain

for j in itertools.chain(*some_list):

一个简短的演示:

>>> import itertools
>>> some_list = [[1, 2], [3, 4]]
>>> for j in itertools.chain(*some_list):
    print j


1
2
3
4

另外还有chain.from_iterable:

>>> for j in itertools.chain.from_iterable(some_list):
    print j


1
2
3
4

(除了细微的语法变化,请参阅this question 了解差异的解释。)

【讨论】:

  • 你的意思是我还能用这个做字典吗?我可以看到它如何用于列表列表,但看不到它如何用于字典列表。请给我看看好吗?
  • 答案是“视情况而定”。对于你想要做的事情,不,虽然如果你只是想遍历列表值,你可以做for j in itertools.chain.from_iterable(map(itemgetter("some_key"), some_list)): print j
【解决方案2】:

使用链:

import itertools


some_list = [[1,2,3,4],[3,4,5,6]]

for i in itertools.chain(*some_list):
    print i
1
2
3
4
3
4
5
6

【讨论】:

    猜你喜欢
    • 2016-04-13
    • 1970-01-01
    • 2021-10-05
    • 2020-12-15
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多