我的清单是:
a=[1,2,3,4]
现在我希望我的列表是:
a=[-1,-2,-3,-4]
如何在不使用任何循环的情况下以这种方式更改列表?
更新:这可能是一个大型列表,大约10000个元素.
sol*_*oth 10
使用Python的地图功能
a[:] = map(lambda x: -x, a)
以下是上述链接中的地图功能说明:
map(function,iterable,...)
将函数应用于iterable的每个项目并返回结果列表.如果传递了其他可迭代参数,则函数必须采用那么多参数,并且并行地应用于所有迭代的项.如果一个iterable比另一个短,则假定使用None项扩展.如果function为None,则假定为identity函数; 如果有多个参数,map()返回一个由包含所有迭代中相应项的元组组成的列表(一种转置操作).可迭代参数可以是序列或任何可迭代对象; 结果始终是一个列表.
来自ipython的一些快速而肮脏的基准测试
In [1]: a=range(10000)
In [2]: import numpy 
In [3]: timeit [-i for i in a]
1000 loops, best of 3: 576 us per loop
In [4]: timeit map(lambda i:-i, a)
1000 loops, best of 3: 1.68 ms per loop
In [5]: timeit list(-1*numpy.array(a))
100 loops, best of 3: 2.53 ms per loop
请注意,如果a可以是一个numpy数组,则不需要浪费时间进行转换
In [6]: a = numpy.array(a)
In [7]: timeit -- -a
100000 loops, best of 3: 15.4 us per loop