我想迭代从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
除了reverse
enumerate
d 列表,我们还可以将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)):
但由于它是一面镜子,你可以认为它是反模式的。