' IndexError:列表索引超出范围'在任职期间

时间:2016-12-05 17:54:51

标签: python list loops indexing

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']]
t = []
indexPointer = 0

for coord in j:
    for number in coord:
        t[indexPointer][0] = number
        indexPointer += 1
indexPointer = 0
for coord in k:
    for number in coord:
        t[indexPointer][1] = number
        indexPointer += 1
print(t)

应输出:

[[4,5],[5,2],[1,4],[1,2],[1,2],[5,4],[3,3],[4,3],[3,4],[1,3]]

相反,我得到:

t[indexPointer][0] = number
IndexError: list index out of range

我该如何解决这个问题?我试图找到一种方法,但没有任何运气。

修改 我没有包含所有必要的代码。它已经更新。

3 个答案:

答案 0 :(得分:0)

为什么不会超出范围?

您的t变量只是一个空的单维列表,您尝试访问该列表,就像它是二维的一样。

我认为您只是想将j中的所有内容添加到t?在这种情况下,您可以执行以下操作:t = list(itertools.chain(*j))

编辑:注意到每个元素都在其自己的列表中:t = [[x] for x in itertools.chain(*j)]

答案 1 :(得分:0)

你无法索引到一个空列表,因为那里什么也没有。您必须向其添加内容,或者使用空值预填充,例如:

t = [None] * 10

但是,即使这样也无法正常工作,因为您希望t是二维的。你可能想尝试defaultdict,如下:

from collection import defaultdict
t = defaultdict(dict)
t[1][0] = 'a'

答案 2 :(得分:0)

我会推荐Pythonista发布的代码,但要调整代码以使其正常工作:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
t = []

for coord in j:
    for number in coord:
        t.append([number])

print(t)
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']]

当您循环浏览每个元素时,.append列表方法会在[number]上添加到列表t的末尾。

您可以使用list comprehension

完成相同的嵌套循环代码
t = [[number] for coord in j for number in coord]

<强>更新

由于您已更新了问题:

在这种情况下,您应该考虑zip功能。

t=list(itertools.chain(*zip(j,k)))

如果您想使用for循环,请更新上面的代码,但在此您可以使用列表.extend方法:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']]
t = []

for coord in zip(j,k):
    t.extend(coord)

print(t)
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']]

作为一种理解:

t=[i for coord in zip(j,k) for i in coord]