计算Python 3中包含3个公共元素的子列表的数量

时间:2014-12-15 00:57:39

标签: python list count nested-lists sublist

我在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个元素的所有列表,但不知怎的,这似乎不是这样做的。

感谢任何帮助。

2 个答案:

答案 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)

您可以将allsum

一起使用
print(sum(all(ele in sub for ele in b ) for sub in  a))