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
我该如何解决这个问题?我试图找到一种方法,但没有任何运气。
修改 我没有包含所有必要的代码。它已经更新。
答案 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]