如何更改列表中的值并创建新列表

时间:2016-03-07 21:04:12

标签: python arrays list if-statement for-loop

代码:

a = [4,4,6,4,10]

for i in a:
    if i == 4:
        i = i + 10
        print(i)

我希望此代码形成一个新数组,即:

b = [14,14,6,14,10]

我不明白该怎么做。

3 个答案:

答案 0 :(得分:2)

将其分解为零件。现在你实际上正在检查一个等于4的数字并将其递增10,这很好。

您现在缺少两个关键组件:

  1. 创建新列表并附加到其中
  2. 您想要的所有其他元素的else条件。
  3. 因此,对于第一部分,首先要创建一个新列表:

    new_list = []
    

    所以,我们有:

    a = [4,4,6,4,10]
    new_list = []
    

    然后,您想append到新列表:

    for i in a:
        if i == 4:
            i = i + 10
            new_list.append(i)
    

    但是,现在,您需要适应不想增加的值,这是您需要else条件的地方:

    因此,如果它不等于4,只需将该值按原样附加到新列表中:

    for i in a:
        if i == 4:
            i = i + 10
            new_list.append(i)
        else:
            new_list.append(i)
    

    这几乎可以纠正您在代码中遇到的问题。

    现在,要进行一项小调整,就是这一行:

    i = i + 10
    

    可以重写为:i += 10

    所以,最后,我们有:

    a = [4,4,6,4,10]
    new_list = []
    
    for i in a:
        if i == 4:
            i += 10
            new_list.append(i)
        else:
            new_list.append(i)
    

    最后,这可以全部缩短为一行:

    new_list = [i + 10 if i == 4 else i for i in a]
    

答案 1 :(得分:1)

可以使用列表理解轻松完成:

>>> a = [4,4,6,4,10]
>>> b = [14 if x == 4 else x for x in a]
>>> b
[14, 14, 6, 14, 10]

或者更接近原始代码:

[i + 10 if i == 4 else i for i in a]

代码的问题在于

i = i + 10

不会修改列表的值。您所做的只是重新绑定名称ii + 10 - 但是您对新值一无所知。

没有列表理解的传统方式看起来像这样:

>>> a = [4,4,6,4,10]
>>> b = [] # empty result list
>>> for item in a:
...     if item == 4:
...         b.append(14) # alternatively: b.append(item + 10)             
...     else:
...         b.append(item)
... 
>>> b
[14, 14, 6, 14, 10]

答案 2 :(得分:1)

for idx in range(len(a)):
    i = a[idx]
    if i == 4:
        i = i+10
        a[idx] = i