2011-06-21 15 views
11

Değerini temel alarak öğeleri işlemek yerine, öğenin konumuna dayalı bir işlevi çalıştırmam gerekiyor. Bu, listenin içeriğine dayalı bir filtreleme örneğidir.Yalnızca bir konumdaki öğelerin listesini nasıl filtreleyebilirim?

only_words = filter(str.isalpha, my_list) 

Hatta pozisyonda sadece öğeleri içeren listenin bir dilim oluşturmak istiyor, yani:

new_list = [] 
pos = 0 
for item in my_list: 
    if pos % 2 == 0: 
     new_list.append(item) 

Bu yol çok çirkin. Daha iyi öneriler?

cevap

20

Bunu kullanabilirsiniz: my_list[::2] (tek için - my_list[1::2]) garip pozisyonları verir

+0

. 'My_list [:: 2] 'demek istediniz. –

+0

Bunu açıklayabilir misiniz? '::' özel bir operatör mü? Böyle bir şey görmemiştim. – naeg

+0

@lazyr Teşekkürler, her zaman bu sözleri karıştırıyorum. :-( – DrTyrsa

6
[v for k, v in enumerate(mylist) if k % 2 == 0] 
+1

Dilimleme daha iyidir, ancak' enumerate() 'daha fazla sevgiye ihtiyaç duyar. –

İlgili konular