【问题标题】:How do I iterate in a cascaded format (in a for loop) over a list of unknown length in Python?如何在 Python 中以级联格式(在 for 循环中)迭代未知长度的列表?
【发布时间】:2015-12-15 16:19:50
【问题描述】:

考虑有一个列表A = [ [ ], [ ], ..., [ ] ](n 次)。 A 的每个子列表都包含几个列表。我想做的是同时迭代它们。可以使用 itertools 库中的“itertools.product”函数轻松完成。像

    for i,j,k in itertools.product(A[0],A[1],A[2]):
        #my code

就足够了。但是我不知道列表 A 的长度。如果是 3,我可以使用上面的代码。目前我正在做这样的事情

    if len(A) == 2:
        for i,j in itertools.product(A[0],A[1]):
            #my code

    elif len(A) == 3:
        for i,j,k in itertools.product(A[0],A[1],A[2]):
            #same code with minor changes to include parameter k

    elif len(A) == 4:
        for i,j,k,l in itertools.product(A[0],A[1],A[2],A[3]):
            #same code with minor changes to include parameter k and l

由于这很乏味,我想知道是否有使用列表理解或其他方法的通用解决方案。我正在用 Python 编写代码。

【问题讨论】:

  • 需要for循环吗?还有其他方法可以遍历未知长度的列表
  • 不一定是for循环,但它应该足以满足目的。无论如何我得到了解决方案(使用 *-unpacking)

标签: python for-loop list-comprehension


【解决方案1】:

你可以使用*-unpacking:

>>> A = [[1,2],[3,4]]
>>> for ii in itertools.product(*A):
...     print(ii)
...     
(1, 3)
(1, 4)
(2, 3)
(2, 4)

ii 将是值的元组。您将使用ii[0],ii[1],ii[2],而不是写i,j,k 等。如果您想根据变量的数量对这些变量进行质量不同的处理,当然,没有办法绕过某种分支。但是,如果唯一的区别是将额外的变量合并到同一种操作中,那么您可能可以大大简化循环内的代码。

【讨论】:

【解决方案2】:

这适合你吗?

for z in itertools.product(*A): 

【讨论】:

    猜你喜欢
    • 2010-11-18
    • 2016-10-07
    • 2013-06-03
    • 2023-01-25
    • 2023-03-25
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多