2013-11-28 54 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