2014-12-15 2 views
0

Я использую Python 3.4 и Wing Personal в Windows 7. У меня есть список из списка int и второго списка, который содержит 3 ints. Я хотел бы указать, сколько раз все 3 элемента списка [b] отображаются в списке [a].подсчет количества подписок, содержащих 3 общих элемента в Python 3

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, и в то время как пол деление бы вылечить это не помогает, если список [а] содержит 20 подсписка и один 14 произошел в 6 подсписке.

Проблема заключается в том, что подсчитывается общее количество раз, когда любой из элементов в списке [b] встречается в списке [a], а не в виде шаблона из всех трех элементов. Я разделил на 3 мысли, которые сделают правильный подсчет до тех пор, пока я не осознаю, что только 14 произошли в списке, который также был подсчитан, поэтому счет будет отключен.

Обратите внимание, что индекс отличается в каждом списке, и иногда между элементами, которые я хочу идентифицировать, возникает другой элемент. т.е. элементы не всегда вместе, как 11,14,15. иногда между ними есть еще один элемент.

Я считал, что пытаюсь удалить все числа, кроме 11,14,15, затем удалить весь список длиной менее 3 элементов, но каким-то образом это не похоже на то, как это сделать.

Любая помощь приветствуется.

ответ

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) 
+0

Ах ... Тонкое ... +1 :) – thefourtheye

0

Вы можете использовать all с sum:

print(sum(all(ele in sub for ele in b) for sub in a)) 
+0

Список b должен быть обозначением dict, чтобы сделать эту работу, не так ли? – user3011520

+0

@ user3011520, нет, он будет работать для любого итерабельного –

Смежные вопросы