대부분의 경우 첫 번째 반복을 마지막 반복 대신 특별한 경우 로 만드는 것이 더 쉽고 저렴 합니다.
first = True
for data in data_list:
if first:
first = False
else:
between_items()
item()
이것은 iterable이없는 경우에도 가능합니다 len()
.
file = open('/path/to/file')
for line in file:
process_line(line)
# No way of telling if this is the last line!
그 외에도, 당신이하려는 일에 달려 있기 때문에 일반적으로 우수한 해결책이 없다고 생각합니다. 예를 들어, 목록에서 문자열을 작성하는 경우 "특별한 경우"루프 를 사용하는 str.join()
것보다 자연스럽게 사용하는 것이 좋습니다 for
.
동일한 원리를 사용하지만 더 간결합니다.
for i, line in enumerate(data_list):
if i > 0:
between_items()
item()
익숙하지 않습니까? :)
@ofko와 iterable이없는 iterable의 현재 값이 len()
마지막 값인지 실제로 알아야하는 다른 사람들을 위해 , 당신은 미리 봐야합니다 :
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
그런 다음 다음과 같이 사용할 수 있습니다.
>>> for i, has_more in lookahead(range(3)):
... print(i, has_more)
0 True
1 True
2 False