【问题标题】:How to use 2 index variable in a single for loop in python如何在python的单个for循环中使用2个索引变量
【发布时间】:2019-01-15 19:03:29
【问题描述】:

C 语言中,我们可以在一个for 循环中使用两个索引变量,如下所示。

for (i = 0, j = 0; i < i_max && j < j_max; i++, j++)

有人可以在Python 中告诉如何做到这一点吗?

【问题讨论】:

标签: python for-loop


【解决方案1】:

通过zip,我们可以实现这一目标。

>>> i_max = 5
>>> j_max = 7
>>> for i, j in zip(range(0, i_max), range(0, j_max)):
...     print str(i) + ", " + str(j)
...
0, 0
1, 1
2, 2
3, 3
4, 4

【讨论】:

  • 我不同意。这不考虑不同大小的列表,是吗?
  • @rashok 的好解决方案。适用于相同大小的列表。如果你想要一个数据框,你可以创建一个 (i, j) 的元组并附加到一个列表中。该列表可用于创建数据框。
【解决方案2】:

您可以在 Python 中使用语法for i,j in iterable: 执行此操作。当然,在这种情况下,可迭代对象必须返回一对值。因此,对于您的示例,您必须:

  • 定义ij 的值列表
  • 构建从两个列表返回一对值的可迭代对象:zip() 在这种情况下是你的朋友(如果列表的大小不同,它会停在最短的最后一个元素)
  • 使用语法for i,j in iterable:

这是一个例子:

i_max = 7
j_max = 9

i_values = range(i_max)
j_values = range(j_max)

for i,j in zip(i_values,j_values):
    print(i,j)
    # 0 0
    # 1 1
    # 2 2
    # 3 3
    # 4 4
    # 5 5
    # 6 6

【讨论】:

  • 与@rashok 提供的答案相同
【解决方案3】:

如果第一个答案还不够;考虑到不同大小的列表,一个可能的选择是:

a = list(range(5))
b = list(range(15))
for i,j in zip(a+[None]*(len(b)-len(a)),b+[None]*(len(a)-len(b))):
    print(i,j)

或者,如果你想在较短的列表中循环:

from itertools import cycle

for i,j in zip(range(5),cycle(range(2)):
    print(i,j)

【讨论】:

    【解决方案4】:

    一种可能的方法是遍历一个完整的列表列表。 例如,如果你想获得类似的东西

    for r in range(1, 3):
        for c in range(5, 7):
            print(r, c)
    

    产生

    # 1 5
    # 1 6
    # 2 5
    # 2 6
    

    是通过使用

    for i, j in [[_i, _j] for _i in range(1, 3) for _j in range(5, 7)]:
        print(i, j)
    

    也许,有时多写一行也不错。

    【讨论】:

      猜你喜欢
      • 2017-04-25
      • 2021-04-23
      • 2018-08-15
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多