[英]How to compare list A and B and return yes if any sublist of B is in A
假设有两个列表A=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
和B=[[1,2,3],[5,6,4],[7,1,9]]
。 我想比较这两个列表,如果 B 的任何子列表在 A 中,则返回yes
,如果不返回no
。 另外,我想要 B 的第二个子列表[5,6,4]
返回yes
,因为它具有 A 的第二个子列表的所有项目,即[4,5,6]
。
因此,output 应如下所示:
yes
yes
no
这是代码:
A=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
B=[[1,2,3],[5,6,4],[7,1,9]]
for i in range(len(B)):
if B[i] in A:
print('yes')
else:
print('no')
您可以在同一循环中对一个 go 中的数据 A 和数据 B 进行排序:
A=[[1,3,2],[4,6,5],[7,8,9],[10,11,12]] #I messed up A as well
B=[[1,2,3],[5,6,4],[7,1,9]]
for i in range(len(B)):
if sorted(B[i]) in map(sorted,A):
print('yes')
else:
print('no')
for i in B:
i.sort()
c=0
for k in A:
k.sort()
if i==k:
c+=1
if c>0:
print("yes")
else:
print("no")
不是太花哨,但可以完成工作。 c
用作计数器,仅实现单张打印。 您可以使用break
以一种更好的方式来完成它,但是,我们可能需要比我更有经验的人的帮助。
为了使它工作,对于B
和A
中的每个元素,我们在从列表中提取它之后立即对其进行排序。 然后我们比较它们。
c
包含在第一个循环中,因此我们可以在每个条目上重置它。
必须在完成second loop
后进行printing
,但必须在再次进入第一个循环之前进行。
如果子列表仅包含唯一值,您可以将B
中的值转换为集合,并将它们与从A
中的值派生的集合进行比较:
A=[[1,3,2],[5,4,6],[7,8,9],[10,11,12]]
B=[[3,1,2],[5,6,4],[7,1,9]]
Asets = map(set, A)
print(['yes' if any(set(bsub) == asub for asub in Asets) else 'no' for bsub in B])
Output:
['yes', 'yes', 'no']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.