2013-10-08 93 views
1

非HOMEWORK迭代,並在Python

我有花車x的名單,我希望把它變成名單y,在x所有的第十元素的列表拉姆達內進行比較。

由於我自己的原因,我真的想用少量的線條做到這一點。我想出了這樣的事情:

i = 0 
y = filter(lambda x: (++i)%10; x) 

理論上這應該工作,i已經被定義,++i通常會添加一個變量i,然後去表達。

不幸的是,++在Python中不存在。

任何Pythonic的方法來解決這個問題?

我的另一個想法是使用地圖,並將表達式推入列表y

讓我知道我是否可以更清楚。

回答

15

使用Extended slices

>>> x = range(1,101) 
>>> y = x[9::10] # 9 -> start from 10th, 10: step 
>>> y 
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 
+0

美麗。之前沒有看到過,因爲雖然我一直在使用Python一段時間,但我還沒有完全探索Pythonic更多的做事方式。謝謝! –

3

什麼[value for index, value in enumerate(list_of_floats) if index % 10 == 0]?使用itertools.count

+1

值得注意的是在這種情況下切片更好。但是,在過濾標準更復雜的情況下,這種技術值得了解。 – senderle

0

備選:

>>> x = range(1, 101) 
>>> i = itertools.count(1) 
>>> y = filter(lambda item: next(i) % 10 == 0, x) 
>>> y 
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]