Çoğu zaman ilk yinelemeyi sonuncusu yerine özel durum yapmak daha kolaydır (ve daha ucuzdur) :
first = True
for data in data_list:
if first:
first = False
else:
between_items()
item()
Bu, herhangi bir yinelenebilir, hatta aşağıdakileri olmayanlar için işe yarar len()
:
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, ne yapmaya çalıştığınıza bağlı olarak genel olarak üstün bir çözüm olduğunu düşünmüyorum. Örneğin, listeden bir dize oluşturuyorsanız, "özel durumlu" str.join()
bir for
döngü kullanmaktan doğal olarak kullanmak daha iyidir .
Aynı prensibi kullanarak daha kompakt:
for i, line in enumerate(data_list):
if i > 0:
between_items()
item()
Tanıdık geliyor, değil mi? :)
@Ofko ve gerçekten bir yinelenebilir olanın mevcut değerinin son değer olup olmadığını gerçekten öğrenmesi gereken diğerleri için len()
, ileriye bakmanız gerekecek:
def lookahead(iterable):
"""Pass through all values from the given iterable, augmented by the
information if there are more values to come after the current one
(True), or if it is the last value (False).
"""
# Get an iterator and pull the first value.
it = iter(iterable)
last = next(it)
# Run the iterator to exhaustion (starting from the second value).
for val in it:
# Report the *previous* value (more to come).
yield last, True
last = val
# Report the last value.
yield last, False
O zaman bu şekilde kullanabilirsiniz:
>>> for i, has_more in lookahead(range(3)):
... print(i, has_more)
0 True
1 True
2 False