[英]How to enumerate over a list in python backwards with index(From the end to the beginning)
我想遍歷從 Digikey api 收到的數據列表,因為 function 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
,然后將 enumerate object 轉換為列表,它將給出每個元組將具有索引和值的元組列表,最后迭代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
如果您不想要 memory 中的序列的另一個副本,您可以創建自定義生成器。
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
除了對enumerate
d 列表進行reverse
之外,我們還可以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
您還可以 go for i = -j
和 get -1 2, 1, 0
-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)):
但由於它是一面鏡子,你可以認為它是一種反反模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.