【问题标题】:Python List CopyingPython 列表复制
【发布时间】:2013-07-04 00:05:54
【问题描述】:

我有一个函数可以创建一个名为list_set 的空列表,并添加一个预先存在的列表的副本, original_list,所以list_set[0]original_list

该函数必须复制list_set[0],随机选择一个值并根据 预先存在的函数new_sum,然后将此新列表添加为list_set[1]

同样,该函数必须复制list_set[1](这与 list_set[0]),在list_set[1]中随机选择一个值并对其进行操作 基于函数new_sum,并将其添加为list_set[2]

函数必须 这样做 300 次。

在我的代码中,我注意到该函数正在创建 300 个相同的 original_list 副本并在每个列表中随机操作一个值。

def condition_manipulate(value):
    list_set=[]
    for i in range(0,value):
        new_list=original_list[:]
        i=random.choice(range(len(original_list)))
        new_list[i]=new_sum(new_list[i])
        list_set.append(new_list)
    return list_set

如何修复此代码?非常感谢您的帮助

【问题讨论】:

  • 你想要一个深拷贝。看看这个:stackoverflow.com/questions/948032/…
  • new_sum 是另一个实际执行操作的函数
  • new_sum 函数的接口是什么?它需要什么,返回什么?。也尝试将你的调用嵌套拆分成变量,让代码更清晰。对不起,你的代码很丑。
  • new_sum 采用它所采用的任何值,并创建一个 numpy 数组和一个列表的矩阵乘法。如果 new_sum 将 45 作为参数,那么它将执行 numpy.sum(numpy.dot(a[45][:100], initial_conditions[:100],其中 a 是 100 x 100 矩阵,initial_conditions 是列表。如果结果大于零,则 45 上的 new_sum 等于 1。如果 45 上的 new_sum 的结果小于零,则产生 -1
  • 我认为你的代码很好。测试你的new_sum 函数,它可能是罪魁祸首。此外,您正在覆盖代码中的 i 循环变量,请确保这对您来说不是问题。

标签: python list function copy


【解决方案1】:

除了覆盖 i 的问题,如前所述,您实际上似乎总是再次使用原始列表。像这样的东西呢:

def condition_manipulate(value):
    list_set=[original_list]
    for i in range(0,value):
        new_list=list_set[-1][:]
        i=random.choice(range(len(original_list)))
        new_list[i]=new_sum(new_list[i])
        list_set.append(new_list)
    return list_set

【讨论】:

    猜你喜欢
    • 2015-04-25
    • 2013-06-10
    • 2013-07-04
    • 2019-01-08
    • 2011-10-23
    • 2012-01-11
    • 2016-05-25
    相关资源
    最近更新 更多