정렬 할 데이터를 준비하기 위해 일부 코드 행. 이렇게하기 위해 목록의 각 항목이 목록이되어야했습니다. 예를 들어 내 목록이 [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]
입니다.
당신은 다시 사용하여 동일한 목록 개체를 유지, 대신 * A * 복사본을 만들 것입니다 : 당신이
l = [a, b, c, d]
을 가지고, 당신은[[a], [b], [c], [d]]
을하려면 fastes는이 다음이다. –Martijn의 간단한 대답을 확장하십시오. 바깥 쪽 목록에는 (* 반복적으로 수정 한) * one * 목록에 대한 8500 건의 참조가 있습니다. http : // pythontutor에서 –
실행 코드.co.kr (짧은 목록으로) 당신은 무슨 일이 일어나고 있는지 볼 수 있습니다. – furas