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

Is it possible to chain iterators on a list in 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 can only be iterated once so that is why you have to cast it to a list or a 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)]