Python에서 for 루프를 사용하여 중첩 목록에 값을 할당할 때 항상 i의 최종 값을 기준으로 계산되는 이유를 물어봐도 될까요?
扔个三星炸死你
扔个三星炸死你 2017-06-12 09:25:09
0
3
954

두 가지 예가 있는데 첫 번째는 다음과 같습니다.

으아악

이때, a=[3,4,5,6,7]
두 번째는 다음과 같습니다

으아악

이때, a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]

왜 이런 일이 발생하나요? 제 두 번째 글쓰기 방식에 문제가 있는 걸까요?
새내기님들 조언 부탁드려요!

扔个三星炸死你
扔个三星炸死你

모든 응답(3)
大家讲道理

여기서 두 가지 문제가 발생했습니다.
첫 번째 문제는 위에서 언급한 대로 a[0]의 값을 수정했지만 변경된 내용을 i放入列表去处理, 或者说, 你漏了把i질문의 코드에 기록하지 않았습니다.
올바른 방법:

으아악

두 번째 질문은 위에서 질문하신 내용인데 왜 a=[[0,0]]*5의 정의 방법이 모두 a=[[ 7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]a=[[0,0]]*5这种定义方法, 结果出来发现全部都是a=[[7, 0], [7, 0], [7, 0], [7, 0], [7, 0]]
这个问题和第一个问题有个相同之处, 就是你应该是忘了写a[i][0] = i + 3,
其次就是: 如果用[[0, 0]] * 5이 질문은 첫 번째 질문과 한 가지 공통점이 있습니다. a[i][0] = i + 3을 쓰는 것을 잊어버렸습니다.

두 번째 단계는: [[0, 0]] * 5 목록을 사용하여 생성된 경우입니다. , 그 안의 모든 것은 참조이며 5개 객체가 아닌 모두 동일한 객체입니다. 예를 참조하세요:

으아악 id值看到, 他们都是一样的地址, 所以列表中的5个对象, 全是同一个, 所以当你执行a[i][0]= i+3통과
할 수 있으면 아무리 많은 요소를 수정해도 결국에는 같은 목록만 수정하게 됩니다!

그래서 원하는 효과를 해보고 싶다면 해당 방법을 사용하여 목록을 빠르게 생성할 수는 없지만, 다음 방법만 사용할 수 있습니다:🎜 으아악
漂亮男人

반복하려면 i 변수를 사용해야 하기 때문에 항상 0을 변경하면 당연히 a[0]이 덮어쓰여지고 마지막 값이 됩니다
첫 번째 코드에서는 a=[3,4를 얻을 수 없습니다. ,5, 6,7], i 변수를 사용해야 합니다

으아악

두 번째 코드:

으아악

코드를 잘못 쓴 것 같은데, 이런 질문을 하시고 싶으신 것 같아요

으아악

인쇄 가능

으아악

@Lin_R 맞습니다

phpcn_u1582

사실 두 번째 방법은 따로가 아닌 공유하고 있습니다. 현재로서는 목록이고 가변적이지만 첫 번째 방법은 숫자이고 변경할 수 없기 때문입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿