我在Windows 7中使用Python 3.4和Wing Personal。 我有一个int列表和一个包含3个int的第二个列表。我想确定list [b]的所有3个元素出现在列表[a]中的次数。
a=[[1, 6, 11,12, 14, 15], [4, 11, 23, 32, 45, 48],
[3, 7, 11, 14, 15, 17], [1, 8, 14, 24, 45, 53],
[2, 5, 9, 24, 34, 40], [10, 11,13, 14, 15, 22, 36]]
b=[11,14,15]
count =0
anotherList = []
for sublist in a:
for element in b:
if element in sublist:
anotherList.append(element)
count+=1
print (anotherList)
print (count/3)
这里的计数应该是3,而不是3.6,而如果列表[a]包含20个子列表,并且在子列表的6个中发生了一个14,则无法解决这个问题。
问题是这计算列表[b]中任何元素出现在列表[a]中的总次数,而不是所有3个元素的模式。我除了3分,这会使计数正确,直到我意识到如果一个列表中只有14个也被计算,那么计数就会被计算掉。
请注意,每个列表中的索引都不同,有时在我想要识别的元素之间会出现另一个元素。也就是说,元素并不总是在一起,如11,14,15。有时候介于两者之间。
我考虑过删除除11,14,15之外的所有数字,然后删除少于3个元素的所有列表,但不知怎的,这似乎不是这样做的。
感谢任何帮助。
答案 0 :(得分:6)
为什么不简单地使用set
?转换b
以使用set.issubset
方法设置查看它是否是列表中项目的子集:
b = {11,14,15} #notice the {} braces or use `set([11,14,15])`
print sum(b.issubset(x) for x in a)
答案 1 :(得分:0)
您可以将all
与sum
:
print(sum(all(ele in sub for ele in b ) for sub in a))