2010-07-12 31 views

cevap

15
>>> lst = [None,[],None,[1,2],'StackOverflow',[]] 
>>> next(i for i, j in enumerate(lst) if j) 
3 

, sadece varsayılan değer sağlayacak next işlevine:

>>> next((i for i, j in enumerate(lst) if j == 2), 42) 
42 

P.S. list değişken adı olarak kullanmayın, yerleşik gölgeler. Bunu yapmanın

+0

Tek oylama ve tek bir alkış ve kesinlik için bir alkış. –

+1

Haklısınız! Listeden listeye (PEP8'e göre) değiştirildi. – Jonathan

2
try: 
    i = next(i for i,v in enumerate(list_) if v) 
except StopIteration: 
    # Handle... 
1
next(i for (i, x) in enumerate(L) if x) 
5

biri nispeten zarif yoludur:

map(bool, a).index(True) 

("a" geçersiz kılma önlemek için listenizi ... Ben "listesi" değişken adı kaçıyorum olduğu yerel "liste" işlevi)

+1

sadece python-2.x'de çalışır ve yine de tüm boolean değerleri listesini oluşturur. – SilentGhost

+0

@SilentGhost - Doğru. Haritanın python3'te değiştiğini bilmiyordum. –

0
next(i for i, v in enumerate(list) if v) 
İlgili konular