如何使用索引向后枚举python中的列表从末尾到开头

问题描述

我想遍历从 Digikey api 接收到的数据列表,因为函数 enumerate(reversed(part.standard_pricing)) 不起作用并且您无法反转 {{1} } 因为某些原因 需要这样的东西:

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): 的末尾开始,让索引减少而不是增加

知道如何以 Python 方式做到这一点吗?

解决方法

您可以在列表上调用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,4]):
    print(i,d)
    
3 4
2 3
1 2
0 1
,

除了 reverseenumerated 列表进行 enumerate 处理之外,我们还可以对 reversed 列表进行the_list = ["zeroth","first","second"] length = len(the_list) for j,value in enumerate(reversed(the_list),start=1): # "the" index is this i = length - j print(i,value) 处理并对索引使用一些数学运算:

2 second
1 first
0 zeroth

得到

i = -j

您也可以选择 -1,-2,-3 并获得 2,1,0,当索引时,它们分别给出与 class SeedlingsModel ( val name: String = "Tulipe",private var observationModel: ObservationModel ) init { val reasons = Resources.getSystem().getStringArray(R.array.popup_seedlings_reason) val reason = reasons[0] ObservationModel(reason,"").also { observationModel = it } } } 相同的值。

,

您不需要反转或复制列表。就地使用它并从最后索引它:

for b_idx in range(len(part.standard_pricing)-1,-1):
    print(f"Test at: {b_idx},Q: {part.standard_pricing[b_idx].break_quantity}")

这是 Python 反模式的镜像

    for b_idx in range(len(part.standard_pricing)):

但由于它是一面镜子,您可以将其视为反模式。