Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表上的嵌套循环_Python_Python 3.x_List_Loops_For Loop - Fatal编程技术网

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

您的可能重复项每次都会附加相同的列表。