迭代2D列表,将列表中一行上的每个值分配给一个变量,对每一行重复 - python

时间:2013-10-06 02:14:39

标签: python list loops 2d

我有一个包含许多X,Y值的列表

aList = [[1, 2],[3, 4],[5, 6],[7, 8]]

即。 X = 1,Y = 2

我需要分别提取一行上的每个X和Y值,分别将这些值分配给X和Y变量,然后对X和Y值进行操作。

然后应该循环到下一行,再次发生相同的过程。我将使用print而不是在此循环之后需要发生的过多代码。

即。循环开始,X分配1,Y分配2,X和Y用作公式中的输入,循环结束(并重复此列表中的其余值)

aListLen = len(aList)
aListRows = len(aList)
aListCols = len(aList[0])

以下代码仅在列表

中逐个提取值
for row in range(aListRows):
    for column in range(aListCols):
        X = aList[row][column]
        print X

如下添加Y变量会导致错误

for row in range(aListRows):
    for column in range(aListCols):
        X = a[row][column]
        Y = a[row][column+1]
        print X
        print Y

现在看一下,我不确定以下if / elif循环是否会起作用,因为X和Y值需要一起进入公式。 我可以在第二个循环下添加一个if / elif语句,但我仍然需要一种强制第二个循环重复的方法。 (无论如何,这让我们回到原来的问题)

for row in range(aListRows):
    for column in range(aListCols):
        if column == 0:
            X = aList[row][column] 
        elif column == 1:
            Y = aList[row][column]

一旦提供X值,如何强制循环重启? 我假设循环会重复,这次为Y提供值。

有更好的方法吗?

应该指出这是Python 2.7(所以我不能使用Python 3独有的任何东西)

3 个答案:

答案 0 :(得分:3)

你循环遍历内部列表的索引并向它们添加1。当IndexError包含column的值时,这将导致aListCols,因为len(a[row]) == column+1

我认为你正在寻找这个:

In [17]: aList = [[1, 2],[3, 4],[5, 6],[7, 8]]

In [18]: for X,Y in aList:
   ....:     print "X value is %s, Y value is %s" %(X, Y)
   ....:     
X value is 1, Y value is 2
X value is 3, Y value is 4
X value is 5, Y value is 6
X value is 7, Y value is 8

答案 1 :(得分:2)

要分配变量而不是打印它们,您可以这样做:

for X,Y in aList:
   tempX = X
   tempY = Y

在第一次迭代时,tempX的值为1,tempY的值为2.在第二次迭代中,tempX将为3,tempY将为4 ...

答案 2 :(得分:0)

您可以使用递归函数来代替循环。 基本上,这是一个自我调用的函数。例如:

def myfunction():
    (something happens that wants you to start the function over)
    myfunction()

因此,它将再次调用该函数,迫使代码返回顶部。