簡體   English   中英

如何使用索引向后枚舉 python 中的列表(從結尾到開頭)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM