我有一个项目列表:list = [a, b, c, d]
在继续下一次迭代之前,我想修改每个项目然后time.sleep(10)
。在最后一次迭代中,我想修改项目,但避免睡觉。
for item in list:
# modify item
time.sleep(10) # avoid this line on the final iteration
不一定是这个结构 - 寻找任何完成工作的方法。
答案 0 :(得分:3)
你可以先睡觉,但是在第一次迭代睡眠时跳过睡眠,而不是:
for idx, item in enumerate(list):
if idx != 0:
time.sleep(10) # avoid this line on the final iteration
# modify item
它在最后一个项目中脱落,没有睡觉。
答案 1 :(得分:3)
使用enumerate
的另一种解决方案:
lst = ['a', 'b', 'c', 'd']
for i, v in enumerate(lst, 1 - len(lst)):
print(v)
if i:
print('sleeping')
<强>输出强>
a
sleeping
b
sleeping
c
sleeping
d
答案 2 :(得分:2)
您可以使用enumerate
来跟踪索引:
for index, data in enumerate(list, 1 - len(list)):
if index:
time.sleep(10)
答案 3 :(得分:2)
如果你反转问题并添加一个布尔值来表示第一个元素,你可以这样做:
do_sleep = False
for item in list:
if do_sleep:
time.sleep(10) # avoid this line on the first iteration.
else:
do_sleep = True
# modify item
答案 4 :(得分:2)
如果你想避免在每次迭代时测试最后一个元素。
for element in elements[:-1]:
process_element(element)
time.sleep(10)
process_element(element)
如果需要将更改应用于列表中的元素(不创建新元素)。
for index, _ in enumerate(elements[:-1]):
process_element(elements, index)
time.sleep(10)
process_element(elements, -1)
def process_element(elements, index):
elements[index] += 1
如果您想避免复制列表,可以使用islice。请注意,len([])的成本为O(1)。
for element in islice(elements, len(elements) - 1):
...
for index, _ in enumerate(islice(elements, len(elements) - 1)):
...
答案 5 :(得分:1)
for i,item in enumerate(list):
# modify item
if i < len(list) - 1:
time.sleep(10)