【发布时间】:2016-06-21 14:34:40
【问题描述】:
代码:
a = [4,4,6,4,10]
for i in a:
if i == 4:
i = i + 10
print(i)
我希望这段代码组成一个新数组,即:
b = [14,14,6,14,10]
我不明白该怎么做。
【问题讨论】:
标签: 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]
我不明白该怎么做。
【问题讨论】:
标签: python arrays list if-statement for-loop
把它分成几部分。现在,您实际上正在正确地检查等于 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]
【讨论】:
可以通过列表理解轻松完成:
>>> 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]
【讨论】:
for idx in range(len(a)):
i = a[idx]
if i == 4:
i = i+10
a[idx] = i
【讨论】: