作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了一个列表列表。我必须从该列表列表中删除作为该列表列表中任何其他列表的完整子集的列表以及等于该列表列表中任何其他列表的列表。
例如,如果我的列表给出为
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/
我是一名优秀的程序员,十分优秀!