问题描述
我想遍历从 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
,
除了 reverse
对 enumerate
d 列表进行 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)):
但由于它是一面镜子,您可以将其视为反反模式。