我有一个这样的列表
results = [100, 100, -100, 100, -100, -100]
我想找出相反数字的第一次出现。所以前 100 将与第一个 -100 匹配,第二个 100 将与第二个 -100 匹配。
我想要这样的输出位置:
[0, 2], [1, 4], [3, 5]
即:[0,2]
表示 results[0]
和 results[2]
,其中第一次出现的 100 与第一次出现 -100
编辑:你可以假设总是有相同数量的正数/负数,并且列表将只包含 1 个数字
我们会提供任何帮助
最佳答案
对于列表仅包含 2 个整数(x
和 -x
)的简单情况,您可以简单地将 zip()
放在一起指标:
indexes = [[],[]]
for i,x in enumerate(results):
indexes[0].append(i) if x > 0 else indexes[1].append(i)
list(zip(*indexes))
例子:
>>> results = [100, 100, -100, 100, -100, -100]
>>> indexes = [[],[]]
>>> for i,x in enumerate(results): indexes[0].append(i) if x > 0 else indexes[1].append(i)
...
>>> list(zip(*indexes))
[(0, 2), (1, 4), (3, 5)]
注意小输入 2 个单独的列表推导(例如 [i for i,x in enumerate(results) if x > 0]
可能比附加 for
更快> 循环。
关于python - 匹配列表python中相反数字的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43142905/