2016-12-24 1 views
-1

정렬 할 데이터를 준비하기 위해 일부 코드 행. 이렇게하기 위해 목록의 각 항목이 목록이되어야했습니다. 예를 들어 내 목록이 [a, b, c, d] 인 경우 목록은 [[a], [b], [c], [d]]이되어야합니다. 여기서 a, b, c 및 d는 정수입니다. 내 코드는하지만 [[d], [d], [d], [d]] 반환목록의 모든 항목이 동일합니까?

len_of_list = random.randint(8500, 10000) 
val_list = range(len_of_list) 

list_one = [[-1]] 
for index in range(0, len_of_list): 
    list_one[0][0] = val_list[index] 
    val_list[index] = list_one[0] 
print val_list 

코드에 일어나는 이상한 것은 마지막 두 번째 라인이 val_list[index] = list_one[0][0]로 대체 될 때, 그것은 단지 []없이 올바른 값을 반환합니다. 따라서 나는 마지막으로 [0]을 제거하면 그 값이 [] 인 값을 반환한다고 가정했습니다. 그러나 반환 된 것은 원래 []으로 둘러싸인 목록의 마지막 정수가 인 경우 모두 값입니다. 이는 이 매 반복마다 list[0][0] = val_list[index]으로 재설정되기 때문에 발생하지 않아야합니다.

따라서 목록이 [[a], [b], [c], [d]] 대신 [[d], [d], [d], [d]]으로 반환됩니다. 물론리스트에는 최소 8500 개의 고유 한 정수가 있지만 d은 목록의 마지막 값을 나타내거나 간단히 d = val_list[len(val_list) - 1]입니다.

+2

당신은 다시 사용하여 동일한 목록 개체를 유지, 대신 * A * 복사본을 만들 것입니다 : 당신이 l = [a, b, c, d]을 가지고, 당신은 [[a], [b], [c], [d]]을하려면 fastes는이 다음이다. –

+0

Martijn의 간단한 대답을 확장하십시오. 바깥 쪽 목록에는 (* 반복적으로 수정 한) * one * 목록에 대한 8500 건의 참조가 있습니다. http : // pythontutor에서 –

+1

실행 코드.co.kr (짧은 목록으로) 당신은 무슨 일이 일어나고 있는지 볼 수 있습니다. – furas

답변

1

당신은 val_list[index]list_one[0]을 넣어. list_one[0]은 목록이므로 val_list[index]은 값이 아닌 주소를 수신합니다. 따라서 list_one[0]의 값이 변경되면 즉, 매 반복시마다 index에 대한 val_list[index]의 값이 변경됩니다.

따라서 목록의 모든 색인에 포함 된 최종 값은 마지막 값인 [d]입니다.

list_one[0]변경 가능 인 목록이므로 이러한 현상이 발생합니다.


실제로이 코드는 실제로 파이썬이 아닙니다. 먼저 val_list = range(len_of_list)을 작성하여 길이가 len_of_list 인 빈 목록을 작성하십시오. 이것은 파이썬 2에서 작동하지만, 파이썬 3에서는 그렇지 않습니다. 왜냐하면 range 객체는 의미 적으로리스트와 다릅니다. 게다가 목록은 요소를 추가하거나 삽입하여 작성해야하지만 빈 목록을 충분히 길게 만든 다음 색인을 채우지 않아야합니다.

for index in range(len_of_list): 
    val_list[index] = [index] 

append으로, 동일한 작업을 수행하기위한 기본적인 파이썬 방법은 다음과 같습니다 : 다음은 충분했을 것이다 동안 다음

, 당신은리스트의 목록을 구축하는 복잡한 코드를 사용하는

len_of_list = random.randint(8500, 10000) 
val_list = list() 

for index in range(len_of_list): 
    val_list.append([index]) 

그러나 가장 평범한 방법은 목록 이해력을 사용하는 것입니다.

[[elt] for elt in l] 
+0

좋은 답변이지만 여전히 내 코드에 문제가 있는지 알고 싶습니다. –

+0

@PythonMaster 답변을 업데이트했습니다. 이 결과물을 얻는 이유를 이해하시기 바랍니다. –

1

이 시도 :

[[x] for x in myList] 
+0

좋은 답변이지만 여전히 내 사과와 함께 무엇이 잘못되었는지 알고 싶습니다. –

관련 문제