在 Python 中迭代第一次迭代
Posted
技术标签:
【中文标题】在 Python 中迭代第一次迭代【英文标题】:Iterating over first iteration in 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 式的。跨度> 【参考方案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
【讨论】:
以上是关于在 Python 中迭代第一次迭代的主要内容,如果未能解决你的问题,请参考以下文章