【发布时间】:2019-09-25 18:44:40
【问题描述】:
我目前有一个包含元组的列表。
overlap_list = [(10001656, 10001717), (700, 60000), (10001657, 10001718), (10001657, 10001716), (10031548, 10031643), (10031556, 10031656)]
我想要以下输出:
new_list=[(10001656, 10001717),(10001657, 10001718),(10001657, 10001716),(10031548, 10031643), (10031556, 10031656)]
元组内的数字是开始和结束边界。我想找到数字之间重叠的任何元组。
我已经尝试过我找到的这段代码,它提出了一个类似的问题:
import itertools as ittools
def pairwise(iterable):
a, b = ittools.tee(iterable)
next(b, None)
return zip(a, b)
overlap_list = [(10001656, 10001717), (700, 60000), (10001657, 10001718), (10001657, 10001716), (10031548, 10031643), (10031556, 10031656)]
print([list(p) for k, p in it.groupby(pairwise(overlap_list), lambda x: x[0][0] < x[1][0] < x[0][1]) if k])
但这给出了:
[[((10031548, 10031643), (10031556, 10031656))]]
我查看了不同的解决方案,但我面临的问题是按之前的位置进行索引似乎不起作用。
如何获得所需的输出?任何帮助将不胜感激。
【问题讨论】:
-
重叠是什么意思?
-
@DanielMesejo:例如:
(10001656, 10001717),(10001657, 10001718):将元组视为range(start.value, end.value),因此第二个start.value (10001657)在第一个元组的range内。 -
您想要的输出似乎包含两组不同的重叠元组而不改变原始列表的顺序,这是否意味着您只是试图过滤掉任何不与任何其他元组重叠的元组在列表中?而且你不关心输出顺序或分组?
-
@benvc:是的,你是对的,我想在列表中找到任何具有重叠值的元组。我不在乎输出的顺序。
标签: python python-3.x list tuples