假设我有一个清单
a = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
我想增加该列表中的每个项目.我想做一些语法上容易的事情
for item in a:
item += 1
Run Code Online (Sandbox Code Playgroud)
但是在那个示例中,python只使用了值item,而不是它的实际引用,所以当我完成该循环时a仍然返回[1,2,3]而不是[2,3,4].我知道我可以做点什么
a = map(lambda x:x+1, a)
Run Code Online (Sandbox Code Playgroud)
但这并不适合我当前的代码,我不想重写它: - \
Tri*_*ych 21
你走了:
# Your for loop should be rewritten as follows:
for index in xrange(len(a)):
a[index] += 1
Run Code Online (Sandbox Code Playgroud)
顺便提一下,item是对itemin 的引用a,但是当然你不能为整数赋值.对于任何可变类型,您的代码都可以正常工作:
>>> a = [[1], [2], [3], [4]]
>>> for item in a: item += [1]
>>> a
[[1,1], [2,1], [3,1], [4,1]]
Run Code Online (Sandbox Code Playgroud)
Aar*_*paa 12
在python整数(和浮点数,字符串和元组)是不可变的,所以你有实际的对象(而不是副本),你只是无法改变它.
发生的事情是:在行中:item += 1您正在创建一个新的整数(值为item + 1)并将名称绑定item到它.
你想要做的是改变a[index]指向行的原因的整数a[index] += 1.您仍然在创建一个新的整数,但随后您将更新列表以指向它.
作为旁注:
for index,item in enumerate(a):
a[index] = item + 1
Run Code Online (Sandbox Code Playgroud)
...比Triptych发布的答案略微更惯用.
map这是一个基于列表理解的解决方案,而不是基于您的解决方案
a = [item + 1 for item in a]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2966 次 |
| 最近记录: |