如何使用 Python 从长嵌套列表中删除短列表,即使项目不连续?
how to delete the short lists from a long nested list even the items are not continuous using Python?
例如:
t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
如果项目包含在一个长列表中,即使项目不连续,我也想删除短列表。所以,我希望结果是:
[[1, 2, 3, 4, 5, 6],[6,7]]
我可能自己想出来,但我的方法不够聪明。有人可以帮我吗?
我的做法很简单
- 我检查了最后一个元素是否已经存在于我们的较长列表中。如果我们出现,那么我们不需要添加到更长的列表,如果不是这样,那么我们将添加到更长的列表
sorted_lists=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
sorted_big_lists =[]
for sorted_list in sorted_lists:
for test_list in sorted_big_lists:
if sorted_list[-1] in test_list:
break
else:
sorted_big_lists.append(sorted_list)
print(sorted_big_lists)
因为列表中的所有元素都是唯一的,而且我喜欢使用集合
这是我的代码。还没有检查它的效率,但它看起来更干净 :D
t = [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
t = [set(l) for l in t]
t = [list(x) for x in t if not any([x.issubset(y) for y in t if x != y])]
从小到大排序,将它们设为集合,然后将它们从列表中弹出,以减少每次计算的列表大小。
t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
t = sorted(t, key=lambda x: len(x))
t = [set(x) for x in t]
for i in range(len(t)):
a = t.pop(0)
if not any([a.issubset(x) for x in t]):
print(a)
例如:
t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
如果项目包含在一个长列表中,即使项目不连续,我也想删除短列表。所以,我希望结果是:
[[1, 2, 3, 4, 5, 6],[6,7]]
我可能自己想出来,但我的方法不够聪明。有人可以帮我吗?
我的做法很简单
- 我检查了最后一个元素是否已经存在于我们的较长列表中。如果我们出现,那么我们不需要添加到更长的列表,如果不是这样,那么我们将添加到更长的列表
sorted_lists=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
sorted_big_lists =[]
for sorted_list in sorted_lists:
for test_list in sorted_big_lists:
if sorted_list[-1] in test_list:
break
else:
sorted_big_lists.append(sorted_list)
print(sorted_big_lists)
因为列表中的所有元素都是唯一的,而且我喜欢使用集合 这是我的代码。还没有检查它的效率,但它看起来更干净 :D
t = [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
t = [set(l) for l in t]
t = [list(x) for x in t if not any([x.issubset(y) for y in t if x != y])]
从小到大排序,将它们设为集合,然后将它们从列表中弹出,以减少每次计算的列表大小。
t=[[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [2, 3, 4, 5, 6], [3, 5], [4, 5, 6],[4,5,6],[6,7], [6], [1]]
t = sorted(t, key=lambda x: len(x))
t = [set(x) for x in t]
for i in range(len(t)):
a = t.pop(0)
if not any([a.issubset(x) for x in t]):
print(a)