gpt4 book ai didi

python - 如何从列表数组中删除所有重复列表和属于其他列表子集的列表?

转载 作者:行者123 更新时间:2023-12-01 06:36:29 25 4
gpt4 key购买 nike

我得到了一个列表列表。我必须从该列表列表中删除作为该列表列表中任何其他列表的完整子集的列表以及等于该列表列表中任何其他列表的列表。

例如,如果我的列表给出为

A = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 4], [1, 4, 5, 6, 7, 8]]

输出应该是

[[1, 2, 3, 4, 5], [1, 4, 5, 6, 7, 8]]

我的代码如下:

w=len(A)
sol=[]
for i in range (0,w-1):
for j in range (1,w):
ret=all(elem in A[i] for elem in A[j])
if ret:
if not(A[i] in sol):
sol.append(A[i])
else:
ret=all(elem in A[j] for elem in A[i])
if ret:
if not(A[j] in sol):
sol.append(A[j])

我得到的输出为

[[1, 2, 3, 4, 5], [1, 4], [1, 4, 5, 6, 7, 8]]

我哪里出错了?

如果还有其他方法可以完成此任务,您可以分享。

最佳答案

ret=all(elem in A[i] for elem in A[j]) 中,您正在比较 A[i] = [1,4] 和 A[j] = [ 1, 4] 然后 ret 返回 True。

所以改变 j 的范围就可以了。

# for j in range (1,w): # before

for j in range (i+1,w): # after
...

已编辑

A = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 4], [1, 4, 5, 6, 7, 8], [1, 2, 3, 6]]
w = len(A)
sol = []

# check wheter A[i] is subset of A[j] or not
for i in range(0, w):
for j in range(i+1, w):
ret = all(elem in A[j] for elem in A[i]) # note order: j, i
if ret: # A[i] is subset of A[j]
break

else: # A[i] is not subset for all A[j]
sol.append(A[i])

关于python - 如何从列表数组中删除所有重复列表和属于其他列表子集的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59644552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com