2012-12-08 4 views
0

나는 이런 식으로 파이썬리스트의 목록을 가지고 :이 python 목록의 빈도를 계산하는 방법은 무엇입니까?

base_list (About 3,000,000 sub lists): 

[ 
    ['Hello','World','Lucy','Lily'], 
    ['Hello','Smith','Simpson','Bart'], 
    .... 
] 

은 지금은 작은 목록을 얻을 : 이제

small_list: 

['Hello','World'] 

을, 내가 small_list가 base_list에 나타납니다 몇 번 찾을 필요가있다.

이 표시되면 [1,3]이 [1,2,3,4,5]에 나타납니다.

나는이 시도했습니다

UPDATE :

1.Change 세트의 목록에 base_list.

2.Then 역시 세트로 small_list을 변경

def get_original_freq(self, actors): 
    count = 0 
    s = set(actors) 
    for row in self.orignal_rows: 
     if s.issubset(row): 
     count += 1 
    return count 

그러나 코드는 약 1000 기록은 초당 정말 느린을 검사 한 실행됩니다.

+6

몇 가지 코드를 작성하는 것처럼 보입니다. 대부분의 사용자는 곤경에 처한 코더 코드를 기꺼이 만들지 만 일반적으로 포스터가 이미 문제를 해결하려고 시도했을 때만 도움이됩니다. 이러한 노력을 입증하는 좋은 방법은 지금까지 작성한 코드, 예제 입력 (있는 경우), 예상 출력 및 실제로 얻은 출력 (콘솔 출력, 스택 추적, 컴파일러 오류 등)을 포함시키는 것입니다. 응용할 수 있는). 더 자세하게 제공할수록 더 많은 답변을받을 수 있습니다. –

+1

당신은 잠시 동안 여기에 있었으므로, 지금까지 어떻게 작동하는지 알고 있어야합니다. – Sheena

+0

@NPE 덕분에, 제 질문이 업데이트되었습니다. – MrROY

답변

0

은 내가 역 색인가 날 수 있습니다 찾을

{ 
    'Hello': [1,5,10,8000] 
    'World': [1,2,3,5,9] 
    ... 
} 

할수 있도록 팝업 내가 계산하는 데 필요한 [ '안녕하세요', 'World']의 출현 횟수. 나는 그 두 가지 거꾸로 된 색인을 찾아 공통 문서를 셉니다.

0

내 첫 반응은 바보 (일이기는하지만) 대답 대답하는 것입니다 : 중고 장비 구매는 목록의 목록이며, listB가 하위 목록입니다

def sublistCount(listA, listB): 
    if not len(listB): 
     return 0 
    conditions = ["%s in a" % repr(b) for b in listB] 
    comprehension = '[a for a in listA if %s]' % ' and '.join(conditions) 
    return len(eval(comprehension)) 

.

문자열 목록을 사용하는 경우에도 실제로는 꽤 빠릅니다. 약 1 ~ 2 초 만에 3,000,000 개의 문자열 목록을 조사했습니다.

eval() 함수를 사용하여 코드를 즉석에서 작성하기 때문에 바보라고 불렀습니다. 입력 내용이 확실하지 않으면 잠재적으로 위험 할 수 있습니다. 이 솔루션은 가능한 솔루션의 오케스트라의 바순입니다 : 재미 있고 작동하지만 한 가지 나쁜 소리 나 삐걱 거리는 소리가 모두 나쁜 것입니다.

그러나, 잠재적 인 솔루션을 내가 좋아하는이입니다 :

def sublistCount(listA, listB): 
    b = set(listB) 
    matches = [a for a in listA if b.issubset(a)] 
    return len(matches) 

이 훨씬 깨끗하고 안전하며, 수행 거의뿐만 아니라 (3,000,000 레코드) 최초의 솔루션.

가이 역 색인 될 base_list 1.Make :

관련 문제