2014-12-15 6 views
0

Windows 7에서 Python 3.4 및 Wing Personal을 사용하고 있습니다. int 목록과 3 개의 int 목록이 있습니다. 목록 [a]에 목록 [b]의 세 요소가 몇 번이나 나타나는지 확인하고 싶습니다. 파이썬 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이어야하며 바닥 분할이 경화 할 때 목록 [A] 20 서브리스트를 포함하고, 하나 (14)가 하위 목록 6 발생한 경우에 도움이되지 않는다.

문제는 list [b]에있는 요소 중 3 개 요소의 패턴이 아닌 [a]리스트에있는 요소의 총 횟수를 계산하는 것입니다. 나는 카운트가 끝날 수 있도록 카운트 된리스트에 14 개만이 발생했다면 깨달을 때까지 카운트를 올바르게 할 3 생각으로 나누었다.

색인은 각 목록마다 다르며 때로는 다른 요소가 식별하려는 요소 사이에 있음을 유의하십시오. 즉, 요소가 항상 11,14,15로 함께있는 것은 아닙니다. 때로는 중간에 다른 요소가 있습니다.

11,14,15를 제외한 모든 숫자를 삭제하려고 시도한 다음 3 개 요소 미만의 모든 목록을 삭제했지만 여하튼 그 방법을 사용하지 않는 것 같습니다.

도움을 주시면 감사하겠습니다.

답변

6

set을 사용하지 않는 이유는 무엇입니까?

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

당신은 allsum로 사용할 수 있습니다 : 그것은 set.issubset 방법을 사용하여 목록에있는 항목의 하위 집합 인 경우 참조를 설정 b 변환

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

list b는이 작업을 수행하는 데 dict 표기법을 사용해야합니다. – user3011520

+0

@ user3011520 아니요, 반복 할 수 없습니다. –