2013-11-28 56 views
-2

可以说我有这个名单访问列表元素没有for循环

x = [1,10,5,4] 

,我想补充1对列表中的每个项目。因此,输出将是

x = [2, 11, 6, 5]. 

有没有简单的方法来做到这一点,而不使用循环?

+12

为什么 '无循环' 的要求?您*有*循环以对每个元素应用更改。该循环可以委托给类似于map()的东西,但它仍然需要完成。 –

+1

另外,你有没有尝试过自己呢?什么工作,什么没有? –

+0

无论你做什么,你的代码必须在某个地方循环... – FallenAngel

回答

3

试这

x = [1,10,5,4] 
x = map(lambda y: y+1, x) 
+4

请注意'map()'也循环。在C代码中,但它循环。 –

+1

噢!但不是在Python中) – sheh

2

多么荒谬的要求

x = [x[0]+1, x[1]+1, x[2]+1, x[3]+1] 

最简单的办法与循环

使用map

x = map(1 .__add__, x) 

但随后大多数人会说这就是一个循环

+0

由OP询问如何在'x'具有未知数量的元素时执行此操作。 –

1

这应该有所帮助。

y = lambda x: x+1 

x = [1,10,5,4] 

map(y, x) 
2

回圈很好。列表理解很棒。

x = [e+1 for e in x] 

正如koffein说,它甚至快于地图功能:

>>> timeit.timeit("[e+1 for e in x]","x = list(range(100))",number=100000) 
0.7970689787364194 
>>> timeit.timeit("map((1).__add__,x)","x = list(range(100))",number=100000) 
0.8699621167282174 
>>> timeit.timeit("map(y,x)","x=list(range(100));y=lambda x:x+1",number=100000) 
1.8961955365813026 
+1

它甚至比map((1).__ add__,x)快一点,几乎比map-and-lambda版本快两倍...... – koffein