我有一个元组列表,每个元组中有两个整数和一个字符串。 我需要生成一个新的列表,删除整数范围在其他元组中重叠的元组
我试过这个:
list_all = [(0, 3, 'textA'), (0, 5, 'textB'), (8, 11, 'textC')]
empty_list = []
for i in list_all:
range_i = list( range(list_all[i][0], list_all[i][1]) )
for j in list_all:
range_j = list( range(list_all[j][0], list_all[j][1]) )
if all( item in range_j for item in range_i ) == False:
empty_list.append(range_i)
empty_list
但我得到了一个错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-233-b4cebb65d49c> in <module>()
4
5 for i in list_all:
----> 6 range_i = list( range(list_all[i][0], list_all[i][1]) )
7
8 for j in list_all:
TypeError: list indices must be integers or slices, not tuple
如果我理解正确的话,您只希望在元组与其他元组具有重叠范围时,保持具有最大范围的元组。可以使用集合比较运算符
<
检查某个范围是否在另一个范围内。注意set(a) < set(b)
实际上意味着set(a)
是set(b)
的子集,不等于set(b)
以下是您的问题的单行代码:
输出:
其思想是首先获取所有范围,并仅选择范围集不小于任何其他元组范围集的元组
当然,你也可以这样写
这是我的代码的固定版本(谢谢Eric Cartman)。我意识到我需要的是一个没有ex.(0,3,'textA')的列表,因为0-3与0-5重叠
我有这个输出,我几乎有了,但我正在生成副本:
之所以出现此错误,是因为
i
指向元组,而不是索引(因为您编写了for i in list_all:
而不是for i in range(len(list_all))
对于手头的任务,是否只保留与任何内容不重叠的间隔,还是保留不重叠的最大间隔数的列表?例如,如果有3个范围a、B、C,其中a和C与B重叠,但a与C不重叠,是否返回[a、C]或[]
相关问题 更多 >
编程相关推荐