Python 列表上的嵌套循环
请参阅下面的代码:Python 列表上的嵌套循环,python,python-3.x,list,loops,for-loop,Python,Python 3.x,List,Loops,For Loop,请参阅下面的代码: a=[1,2,3,4] m=[0,0] q=[] for n in a: m[0]=n for n in a: m[1]=n q.append(m) print(q) 所需输出应为: [[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4
a=[1,2,3,4]
m=[0,0]
q=[]
for n in a:
m[0]=n
for n in a:
m[1]=n
q.append(m)
print(q)
所需输出应为:
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]]
但结果是:
[[4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4]]
有什么想法吗?在python列表中作为引用存储在变量中,因此在每次迭代中更改
m
会影响附加到q
列表中的所有m
引用
相反,在附加以下内容之前,请使用m[:]
复制m
:
a=[1,2,3,4]
m=[0,0]
q=[]
for n in a:
m[0]=n
for n in a:
m[1]=n
q.append(m[:])
print(q)
这将产生:
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]]
每次都将相同的列表追加到
q
,因此更改将影响q
中的每个子列表。但是,使用列表理解有一种更简单的方法:
q = [[i, j] for i in a for j in a]
输出:
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]]
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
或者使用itertools
q = list(itertools.product(a, repeat=2))
输出:
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]]
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
您的可能重复项每次都会附加相同的列表。