首页 > 解决方案 > 如何用索引向后枚举python中的列表(从结尾到开头)

问题描述

我想遍历从 Digikey api 接收到的数据列表,任何人都没有太多运气谷歌搜索,因为该功能enumerate(reversed(part.standard_pricing))无法正常工作,并且由于某种原因您无法反转类似的part.standard_pricing东西:

for b_idx in range(part.standard_pricing, -1, -1):
            print(f"Test at: {b_idx} , Q: {part.standard_pricing[b_idx].break_quantity}")
            if PCountQ >= part.standard_pricing[b_idx].break_quantity:
                parts_df['PRICE_PER_PCB_Q'][idx] = part.standard_pricing[b_idx].unit_price * PCountQ
                break

但是范围也不适用于列表...

我想这样做:

for b_idx, price_break in enumerate(part.standard_pricing):

只是从末尾开始part.standard_pricing并让索引减少而不是增加

关于如何以python方式做到这一点的任何想法?

标签: pythonloopsreverse

解决方案


您可以调用enumerate列表,然后将枚举对象转换为列表,它将给出元组列表,其中每个元组将具有索引和值,最后迭代reversed列表。

data = [1,2,3,4]
for i,d in reversed(list(enumerate(data))):
    print(i,d)
    
3 4
2 3
1 2
0 1

如果您不想在内存中创建另一个序列副本,您可以创建自定义生成器

def reverseEnum(data: list):
    for i in range(len(data)-1, -1, -1):
        yield (i, data[i])
for i, d in reverseEnum([1, 2, 3, 4]):
    print(i, d)
    
3 4
2 3
1 2
0 1

推荐阅读