如何使用索引向后枚举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方式做到这一点的任何想法?

你可以在列表中调用enumerate,然后将枚举对象转换为 list,它将给出元组列表,其中每个元组都有索引和值,最后迭代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

除了reverseenumerated 列表,我们还可以将reversed列表enumerate并为索引使用一些数学

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相同的值。

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

for b_idx in range(len(part.standard_pricing)-1, -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)):

但由于它是一面镜子,你可以认为它是模式的。

最新更新