You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python二维列表生成异常:循环添加随机修改列表后所有行重复

问题分析与解决方案

核心问题:列表引用导致内容重复

你遇到的问题根源是列表属于可变对象,每次向macierz添加的都是同一个podlista的引用。后续对podlista的修改会同步影响所有已添加到macierz的元素,最终所有行都指向最后一次修改后的列表,因此内容完全一致。

额外优化点

  1. import random放在循环内会重复导入模块,应移到代码开头。
  2. 内层for k in range(n)逻辑不合理:该循环会从索引0到n-1逐个执行交换,相当于每行执行了x*n次交换,远超过你设定的x次单行交换次数。

修正后的代码

import random

n = 4
m = 4
x = 2
original_podlista = [0, 0, 1, 1]

def swapPositions(lst, pos1, pos2):
    # 更简洁高效的交换方式,替代pop+insert
    lst[pos1], lst[pos2] = lst[pos2], lst[pos1]
    return lst

macierz = []

for w in range(m):
    # 每次生成新行时复制原始列表,确保每行是独立对象
    podlista = original_podlista.copy()
    # 执行x次随机交换
    for y in range(x):
        # 随机选取两个位置进行交换
        pos1 = random.randint(0, n-1)
        pos2 = random.randint(0, n-1)
        swapPositions(podlista, pos1, pos2)
    macierz.append(podlista)

print(macierz)

关键修改说明

  • 用original_podlista.copy()创建新列表副本,保证每行都是独立的对象,修改操作不会互相影响。
  • 将import random移至代码开头,避免重复导入模块的冗余操作。
  • 调整交换逻辑:内层循环仅执行x次随机交换,匹配你设定的x为单行交换次数的需求。
  • 简化swapPositions函数,利用Python的多变量赋值特性完成交换,比pop+insert更高效简洁。

内容的提问来源于stack exchange,提问作者slow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 20:20:36