我有以下两种形式的清单:
lst1 = [(1.2, 4), (5, 8), (19, 21), (24.5, 26)]
lst2 = [(1, 3), (6.55, 14.871), (22, 23)]
Run Code Online (Sandbox Code Playgroud)
我想要得到的输出是:
output = [(1.2, 3), (6.55, 8)]
Run Code Online (Sandbox Code Playgroud)
基本上,我想要两个列表中元组定义的范围之间的交集。
您可以假设-
给定列表中要排序的索引。例如,在lst2中:
1 < 6.55 < 22
Run Code Online (Sandbox Code Playgroud)有效范围(在一个元组中,startVal <= endEndVal)。在lst2中:
1 < 3 and 6.55 < 14.871 and 22 < 23
Run Code Online (Sandbox Code Playgroud)什么是实现此目标的有效方法?
我认为最好的方法是使用列表理解,因为两个列表的长度相同。
为了便于阅读,分为两个列表:
# get the min max ranges
a = [(max(i[0], j[0]),min(i[1],j[1])) for i,j in zip(lst1, lst2)]
# check that min is smaller than max
a = [(i,j) for (i,j) in a if i < j]
Run Code Online (Sandbox Code Playgroud)
或在一个列表中:
a = [(i,j) for (i,j) in [(max(i[0], j[0]),min(i[1],j[1])) for i,j in zip(lst1, lst2)] if i < j]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |