2011-01-06 8 views
2

괜찮 내가 가장 인기있는 색상은 내가이 목록을 사용하여 수행 할 수 있습니다 무엇인지 알고하고 싶은 말은 가장 인기있는 색상을 저장파이썬 목록 -

popular.append("red") 
popular.append("blue") 
popular.append("green") 
popular.append("red") 
popular.append("yellow") 
popular.append("red") 
popular.append("blue") 
popular.append("red") 
popular.append("yellow") 

나는

red,blue,yellow,green 

이있다 원하는 파이썬 목록을 사용하여이 작업을 수행 할 수있는 깔끔한 방법 - 웹에서 목록에 대한 게시물과 사용할 수있는 멋진 것들을 본 것을 기억합니다.

내 사이트에서 가장 인기있는 페이지 방문 - 예를 들어 가장 많이 방문한 상위 5 개 페이지 - 목록이나 사전으로 할 수있는 사용자를 저장하고 싶습니다. 합리적인 방법입니까?

+0

왜 이것이 목록이어야합니까? 그것은 잘못된 도구입니다 ... –

+0

나는 모든 선택을 저장하는 다양한 솔루션을 보았습니다 - 무엇을 상기 할 수있는 해결책은 목록이 모든 선택을 저장하지 못했던 것입니다 - 단지 가장 인기가 있거나 트 렌딩입니까? 그래서 상점 10 트렌드 색상을 말할 수있었습니다. 그러나 나는 내가 redbull에 꿈꾸고 있을지도 모른다라고 말했다. – spidee

+0

아무 이유없이, 위의 내 의견을 볼 수 있습니다 - 그것은 모든 선택을 저장하는 경우가 아니 었습니다 - 그래서 아마도 추세였습니까? – spidee

답변

4

Counter 클래스를 사용하면 목록에있는 항목 수에 대한 정보를 얻을 수 있습니다.

목록을 직접 작성하는 경우 이미 데이터가 포함 된 목록이있는 대신 Dictionary을 사용하고 각 색상을 키로하여 값을 증가시킬 수 있습니다. 당신의 편집에 따라

더 많은 세부 사항 :
선택하는 방법은 데이터 모델의 모습에 따라 달라집니다.

사이트 통계가 일부 제 3 자 모듈에 의해 처리되는 경우 지정된 사용자에 대한 사이트 방문 목록을 반환하는 API 만 제공 할 수 있습니다. 시작 지점이 목록이므로 Counter에 피드를 입력 한 다음 맨 위 값을 가져옵니다.

그러나이 데이터를 지속적으로 저장하는 경우 값을 사전에 직접 입력하는 것이 좋습니다 (페이지가 키이고 방문수가 값입니다). 이렇게하면 각 페이지의 방문 횟수에 신속하게 액세스하고 키 - 값 쌍에 대해 단 하나의 반복으로 상위 5 개 페이지를 찾을 수 있습니다.

0

list.count(x) 당신에게 그 x가 목록에 나타납니다 횟수를 줄 것이다 : 그 순서 일에서 Python Docs

하는 것은 매우 쉽습니다.

4

the right way 시작하자 :

popular = ['red', 'blue', 'green', 'red', 'yellow', 
      'red', 'blue', 'red', 'yellow'] 

from collections import Counter 
c = Counter(popular) 
# lists the elements and how often they appear 
print c.most_common() 
# -> [('red', 4), ('blue', 2), ('yellow', 2), ('green', 1)] 

@spidee : 당신이 언급 할 때 "추세"나는 당신이 마지막 1000 (정도) 색상을보고 사람들이 가장있는보고 싶은 것을 의미하는 것 같아요 공유지?

당신이 사용할 수있는 dequeue (이 목록처럼) 주변의 마지막 항목을 유지하고 그들을 계산하는 카운터를 업데이트 :

from collections import Counter, deque 

def trending(seq, window=1000, n=5): 
    """ For every item in `seq`, this yields the `n` most common elements. 
     Only the last `window` elements are stored and counted """ 
    c = Counter() 
    q = deque() 
    it = iter(seq) 

    # first iterate `window` times: 
    for _ in xrange(window): 
     item = next(it) # get a item 
     c[item]+=1 # count it 
     q.append(item) # store it 
     yield c.most_common(n) # give the current counter 

    # for all the other items: 
    for item in it: 
     drop = q.popleft() # remove the oldest item from the store 
     c[drop] -=1 
     if c[drop]==0: 
      # remove it from the counter to save space 
      del c[drop] 

     # count, store, yield as above 
     c[item] +=1 
     q.append(item) 
     yield c.most_common(n) 


for trend in trending(popular, 5, 3): 
    print trend 
+0

그게 전부 똑똑하다 - 내가 원하는 것, 내가 그 코드로 놀아서 내가 그것을 fuigure 할 수 있는지 확인하고 작동하도록 - 약간의 도움이 필요할지도 모른다 - – spidee

2

파이썬 < 2.7을 사용하는 경우가 collections.Counter을하는가 없습니다 다음을 할 수 있습니다 :

>>> popular = ['red', 'green', 'blue', 'red', 'red', 'blue'] 
>>> sorted(set(popular), key=lambda color: popular.count(color), reverse=True) 
['red', 'blue', 'green'] 
+0

파이썬에서 카운터 없음 <2.7 –

+0

@ THC4k : 네, 발언 해줘서 고마워요. – mouad