使用python中的函数更新列表中的所有项目

时间:2017-10-12 03:30:42

标签: python list function

你能告诉我我做错了什么以及如何解决它。

由于

我有一个功能。

def out(some_list):
    test_list = [1,2,3,4]
    result = []

    for i in some_list:
        if i == 1:
            test_list = [0,0,0,0]
        else:
            test_list = test_list

        result.append(test_list)

    return result

如果我们将其打印出来,它将返回:

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

我需要返回

[[0, 0, 0, 0], [1,2,3,4], [1,2,3,4], [1,2,3,4]]

2 个答案:

答案 0 :(得分:1)

这是因为您在此函数中传递的列表具有1作为第一个元素的值。例如:

out([1,2,3,4]) # ==> [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

逐步完成您的代码:

test_list = [1,2,3,4]
result = []

for i in some_list:           # The value of each element in some_list
    if i == 1:                # If the value is "1" set test_list: [0,0,0,0]
        test_list = [0,0,0,0]
    else:
        test_list = test_list # Otherwise set test_list to itself (doing nothing)

    result.append(test_list)
for i in some_list: 

i的for循环值是您在some_list中所使用的元素的值,它不是我们在列表中所在元素的索引或位置( as看来这个问题打算

    if i == 1:
        test_list = [0,0,0,0]

如果值为1,则test_list将设置为[0,0,0,0]。点击后,只会将值[0,0,0,0]附加到result。因此,如果第一个元素是1,那么您只会在结果中看到值[0,0,0,0],否则您将看到[1,2,3,4],直到循环到达列表{{1}中的值的位置}是some_list

以下是一些例子:

1

希望这能让你更清楚地了解为什么会得到这样的结果。

修改

就您更新的问题而言,这里发生的问题是,当您致电out([0,1,2,3]) # [[1, 2, 3, 4], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] out([1,2,3,4]) # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] out([2,2,5,1]) # [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [0, 0, 0, 0]] 时,只是内存中.append(fig)的引用副本。基本上每当它改变时,你附加的所有副本也会改变。有两种方法可以处理这个问题,首先是在循环范围内定义变量fig,这样它就是每个循环上一个新的不同的变量:

fig

第二种方式是您可以追加 for i in test_list: fig = [2, 1] # <== In the scope of the loop, so each fig is it's on variable ... ,这意味着它会将数组fig[:]复制为新数组并将其传递给fig

append

答案 1 :(得分:0)

这是因为你设置test_list = [0,0,0,0] 因此,即使在test_list = test_list中,也会将结果设置为[0,0,0,0]

尝试使用

def out(some_list):
test_list = [1,2,3,4]
result = []

for i in some_list:
    if i == 1:
        result.append([0,0,0,0])
    else:
        result.append(test_list)

return result