Bir python son öğe tespit pythonic yol '' döngü nedir?
En iyi şekilde (daha kompakt ve "") for döngüsü içinde. son öğe için özel bir tedavi yapmak için bir pythonic bilmek istiyorum Çağrılmalıdır kodu bir parça vararasındaelemanları, son bastırılıyor.
Ben şu anda bunu yapmak nasıl:
for i, data in enumerate(data_list):
code_that_is_done_for_every_element
if i != len(data_list) - 1:
code_that_is_done_between_elements
Daha iyi bir yolu var mı?
Not: kullanma reduce
;) gibi kesmek ile bunu yapmak istemiyorum
CEVAP
Bu yapmak kolaydır times (ve ucuz) çoğuilkyineleme özel durum yerine geçen
first = True
for data in data_list:
if first:
first = False
else:
between_items()
item()
Bu bile len()
si için herhangi bir iterable için çalışır:
file = open('/path/to/file')
for line in file:
process_line(line)
# No way of telling if this is the last line!
Bunun dışında, yapmaya çalıştığınız ne bağlı olarak genel olarak üstün bir çözüm olduğunu sanmıyorum. Eğer listeden bir dize oluşturuyorsanız, örneğin, doğal olarak daha iyi for
bir döngü kullanarak daha str.join()
kullanmak için “özel durum”.
Ama daha kompakt aynı prensibi kullanarak
for i, line in enumerate(data_list):
if i > 0:
between_items()
item()
Tanıdık geliyor, değil mi? :)
@Ofko ve gerçekten varsa len()
olmadan bir iterable geçerli değer son bulmak için gereken başkaları için, ileriye bakmak gerekir:
def lookahead(iterable):
it = iter(iterable)
last = it.next() # next(it) in Python 3
for val in it:
yield last, False
last = val
yield last, True
O zaman bu gibi kullanabilirsiniz:
>>> for i, last in lookahead(range(3)):
... print i, last
0 False
1 False
2 True
Python çoklu kurucular için temiz, pyt...
Python bir metaclass nedir?...
@Staticmethod ve @Python classmethod a...
Neden Python kodunu daha hızlı bir işl...
Eski stil ve yeni stil Python sınıflar...