如何在Python中使用一个for循环中的两个索引变量

10

C语言中,我们可以像下面这样在单个for循环中使用两个索引变量。

返回结果为:

C语言中,我们可以像下面这样在单个for循环中使用两个索引变量。

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

有人能告诉我如何用Python实现吗?


请在这里查看。 - Vasilis G.
是的,我明白了。使用zip我们可以做到这一点。 - rashok
2
可能是["for loop" with two variables?]的重复问题。(https://dev59.com/p2Ml5IYBdhLWcg3wJUEC) - MooingRawr
4个回答

8

使用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

我不同意。这难道不考虑不同大小的列表吗? - sdgaw erzswer
@rashok 给出了一个好的解决方案。对于长度相同的列表非常有效。如果您想要一个数据框,您可以创建一个(i, j)元组并将其附加到列表中。该列表可用于创建数据框。 - Sagar Dawda

1
如果第一个答案不够用,为了考虑不同大小的列表,可能的选项是:
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)

1

有一种可能的方法是迭代一个全面的列表。例如,如果您想获得类似于以下内容的东西

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

which produces

# 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)

也许,有时候再加一行并不是太糟糕。

0

在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

1
请提供需要翻译的内容,我将尽力为您进行翻译。 - Sagar Dawda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接