问题描述
a = [10,-5,30,-23,9]
我想在原始列表中得到两个值的元组列表及其索引,所以我这样做了。
b = list(enumerate(a))
positive = list(filter(lambda x: x[1] > 0,b))
negative = list(filter(lambda x: x[1] < 0,b))
但是在两者之间列出感觉有点不好。有没有办法立即链接这些迭代器?
解决方法
由 enumerate 返回的迭代器只能被迭代一次,因此,您必须将其强制转换为 list 或 tuple ,如果您想多次重用它的功能。
如果您不希望对其进行强制转换,或者发现两次循环遍历列表的效率都不高,则可能需要考虑使用标准的for循环,因为它允许您同时将两个列表附加到两个列表中仅原始列表的一次迭代:
a = [10,-5,30,-23,9]
positive,negative = [],[]
for idx,val in enumerate(a):
if val == 0:
continue
(positive if val > 0 else negative).append((idx,val))
print(f"Positive: {positive}")
print(f"Negative: {negative}")
输出:
Positive: [(0,10),(2,30),(4,9)]
Negative: [(1,-5),(3,-23)]