【问题标题】:Nested loop on a list列表中的嵌套循环
【发布时间】:2018-07-06 21:53:01
【问题描述】:

请看下面的代码:

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 python-3.x list loops for-loop


【解决方案1】:

您每次都将相同的列表附加到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]]

或使用 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)]

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-27
      • 2019-04-22
      • 2018-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 1970-01-01
      • 2022-10-14
      相关资源
      最近更新 更多