是否可以在Python中的列表上链接迭代器?

问题描述

我有一个带有负数和正数的列表:

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)]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...