Programming

리스트의리스트를 초기화하는 파이썬

procodes 2020. 6. 19. 21:03
반응형

리스트의리스트를 초기화하는 파이썬


가능한 중복 :
파이썬 목록 추가 동작

길이가 n 인 목록 목록을 초기화하려고합니다.

x = [[]] * n

그러나 이것은 어떻게 든 목록을 서로 연결합니다.

>>> x = [[]] * 3
>>> x[1].append(0)
>>> x
[[0], [0], [0]]

나는 다음과 같은 것을 기대합니다 :

[[], [0], []]

어떤 아이디어?


문제는 메모리에서 모두 동일한 정확한 목록이라는 것입니다.

[x]*n

구문 을 사용할 때 얻을 수있는 것은

n

많은

x

객체 의 목록 이지만 모두 동일한 객체에 대한 참조입니다. 그것들은 별개의 인스턴스가 아니라

n

동일한 인스턴스에 대한 참조 일뿐 입니다.3 가지 다른 목록을 만들려면 다음과 같이하십시오.

x = [[] for i in range(3)]

이것은 당신에게 3 개 별도의 인스턴스를 제공합니다

[]

당신이 원하는이다,

[[]]*n

비슷하다

l = []
x = []
for i in range(n):
    x.append(l)

while

[[] for i in range(3)]

은 다음과 유사합니다.

x = []
for i in range(n):
    x.append([])   # appending a new list!

In [20]: x = [[]] * 4

In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object


In [22]: x=[[] for i in range(4)]

In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time

참고 URL :

https://stackoverflow.com/questions/12791501/python-initializing-a-list-of-lists

반응형