2012-03-24 2 views
-4
def bucketsort(arr, k): 
    counts = [0] * k 
    for x in arr: 
     counts[x] += 1 
    sorted_arr = [] 
    for i, count in enumerate(counts): 
     sorted_arr.extend([i] * count) 
    return sorted_arr 

누군가이 구문을 설명해 주시겠습니까?파이썬리스트 구문

1)

counts = [0] * k 

2) for i, count 파이썬

for i, count in enumerate(counts): 
     sorted_arr.extend([i] * count) 

같이 단지리스트 및 사전 있는가? 배열 \ 대기열 \ 스택이 없습니까?

+1

1. counts라는 배열을 만들고 k 요소를 모두 0으로 만듭니다. 이와 같은 경우 셸을 사용하여 어떤 일이 발생하는지 테스트합니다. – corazza

+3

'list' * 배열 * (내 의견으로는 무의미하고 혼란 스럽지만, 무엇이든간에) 아주 좋은 스택을 만든다. (역동적이고 과도한 할당이므로, 추가/푸싱을 위해 상각 된 O (1)을 얻는다. 'pop '은 O (1)도). 대기열 (deques)은 표준 라이브러리에 있습니다. 내 머리 꼭대기에는 세트와 힙이 있습니다. – delnan

+0

@Bane 어떤 껍데기가 좋습니다? 파이썬이 아직 설치되지 않았습니다. –

답변

1

시퀀스 유형 및 승산

[0]*k 

이것은 0 -s 함유 크기 k의리스트를 의미한다. 이것은 예를 들어, 어떤 순서 개체에 대해 작동합니다

for i, value in enumerate(values): 
    pass 

이 파이썬의 두 가지 속성을 이용 :

"foo"*2 

반복

은 다음 구문을 고려 목록을 통해. 첫 번째는 for 구문이며 다른 언어에서는 foreach처럼 작동합니다. 예를 들어, 다음과 i 뜻 루프 3 회는 제 3 동등한 0 처음, 1 제 및 2 인 :

for i in [0,1,2]: 
    pass 

번째 개봉 값이다. 당신이 42를 개최한다이 줄 i를 실행 한 후

i, j = (42, 69,) 

, 그리고 j69를 개최한다 : 시퀀스 유형을 감안할 때, 당신은 다른 변수에 그 값을 압축을 풀 수 있습니다.그것은 튜토리얼입니다. 즉, 변경할 수없는 (즉 변경할 수 없습니다) 시퀀스입니다.

마지막으로 함수 enumerate은 시퀀스를 취하여 첫 번째 요소가 인덱스 번호이고 두 번째 요소가 해당 인덱스의 시퀀스 값인 튜플 시퀀스를 반환합니다. 정확하게 말하면, 그것은 순차 객체를 취하고 반복자를 반환하지만, 같은 차이입니다.

기본적으로이 구문을 사용하면 색인과 값을 모두 얻을 수 있습니다. 좋은.

내장 시퀀스 유형은 파이썬

에서 당신은 목록 ([1, "fish", 2, "fish", "red", "fish", "blue", "fish"])하는 딕셔너리 ({'one': 2, 2: 'three'}), 튜플 ((one, [1,2], three,))과 세트 ({"one", 3, (1,2)}, 파이썬 2.7 구문)가 있습니다. 당신은 또한 불변의 집합이고 문법적인 설탕이없는 frozenset을 가지고 있습니다.

Python documentation for built-in types을 참조하십시오.

다음은 표준 collections package에 더 많은 컨테이너 유형이 있습니다. 그리고 좀 더 data types in other places in the standard library.

또한 표준 목록을 스택 또는 대기열로 사용할 수 있습니다. array 패키지를 바보로 만들지 마십시오. 배열을 구현하기 위해 사용하지 마십시오 (일반 목록을 사용하는 경우),이를 사용하여 이진 데이터를 가져옵니다. struct 패키지에 대한 일종의 동반자입니다.

+0

P. 이것은 파이썬 3을위한 훌륭한 교과서입니다 : [컴퓨터 과학자처럼 생각하는 법, 제 3 판] (http://openbookproject.net/thinkcs/python/english3e/). 두 번째 에디션 (동일한 사이트에서 사용 가능)은 Python 2에 대해 설명합니다. [python.org] (http://python.org) 및 notepad ++ 또는 텍스트 편집을위한 표준 Python을 설치하십시오. – cha0site

3
[0] * k 

k 요소 0되는 각 요소를 포함한리스트를 평가한다.

[i] * count 

count 요소 i되는 각 요소를 포함한리스트를 평가한다.

문서의 관련 부분은 여기에 있습니다 : Sequence Types

for i, count in enumerate(counts): 

enumerate 기능은 튜플을 산출 반복자를 반환합니다. 각 튜플에는 인덱스와 관련 항목 counts이 포함되어 있습니다.

i = 0 
for count in counts: 
    #do something with i and count 
    i += 1 
+0

. 'for i, count' 구문은 어떻습니까? –

+2

@EladBenda 파이썬에 대해 아무 것도 모른다면 기본적으로 모든 구조에 대해 물어보아야합니다. 여기서 물어보기 전에 설명서, 책 또는 튜토리얼을 익히는 것이 좋습니다. 그것은 매우 잘 빠르며 게으르지 않게 빠져 나올 수 없습니다. – delnan

+0

@EladBenda 이제 그 내용을 추가했습니다. 그러나 나는 delnan의 의견에 동의한다. 파이썬과 좋은 입문 교과서가 필요합니다. –

0

파이썬은 arrays, queues 클래스를 가지고 있으며, 훨씬 더 (떨어져 좋은 googleable 문서에서)에 따라서 당신의 코드는 동일합니다. 목록을 queuesstacks으로 사용할 수도 있습니다.