2013-04-27 4 views
0

힙을 만들고 사용해야하며 힙을 사용하려고하는데 각 요소가 별도의 힙으로 간주되는 목록 목록으로 요소를 밀어 넣으려고합니다. 그러나 이상하게 행동한다. 제 3 힙에 요소 6과 7을 밀어 넣기 만하면됩니다. 하지만 그 모든 힙에 밀어 넣기. 어떤 방법 이이 ??파이썬에서 힙 배열을 사용하는 방법

>>> test 
[[], [], [], []] 
>>> 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[6, 7], [6, 7], [6, 7], [6, 7]] 
+0

[파이썬 목록 색인] (http://stackoverflow.com/questions/13058458/python-list-index)의 중복 가능성 –

+0

당신은 정말 코드를 표시해야합니다 : 네 가지 목록을 만들기 위해 지능형리스트를 사용하여 . –

+0

고마워요. 그게 문제였습니다. – JATMON

답변

3

는이 같은 test 뭔가를 만든 것 같다 :

>>> from heapq import heappush 
>>> test = [[]] * 4 
>>> 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[6, 7], [6, 7], [6, 7], [6, 7]] 

이것은 같은 목록 객체에 네 개의 참조를 만듭니다.

>>> test = [[] for _ in range(4)] 
>>> heappush(test[2],6) 
>>> heappush(test[2],7) 
>>> test 
[[], [], [6, 7], []] 
+1

지난 며칠 동안이 질문에 적어도 5 번 대답 했어야 만하는 방법을 좋아합니다. – jamylak

2

모든 힙에 대해 동일한 힙 인스턴스를 사용하고 있습니다. 당신은 아마 이런 식으로하고 있습니까?

test = [ [] * 4] 

네 개의 고유 한 힙을 대신 만들어야합니다. 정확히 어떻게 지금하고있는 일에 달려 있습니다.

관련 문제