代码:
a = [4,4,6,4,10]
for i in a:
if i == 4:
i = i + 10
print(i)
我希望此代码形成一个新数组,即:
b = [14,14,6,14,10]
我不明白该怎么做。
答案 0 :(得分:2)
将其分解为零件。现在你实际上正在检查一个等于4的数字并将其递增10,这很好。
您现在缺少两个关键组件:
else
条件。 因此,对于第一部分,首先要创建一个新列表:
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
不会修改列表的值。您所做的只是重新绑定名称i
到i + 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