-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
코드 뜻을 잘 모르겠어요
23.03.17 14:44 작성 조회수 210
1
c[1:2] = ['a', 'b', 'c']
이 코드를 한국말로 풀어 설명하면 어떻게 되나요?
c의 1번째(두번째) 값부터 1개의 값을 []로 변경하라 이건가요?
그래서 결국에는 2번째 값을 []로 변경하라는 건가요?
답변을 작성해보세요.
2
일코
2023.03.17
재미있는 기법을 배워가네요.
sykb7000님도, 이미 테스트해보셔서 아시겠지만^^;
그래서 결국에는 2번째 값을 []로 변경하라는 건가요?
① 위 말씀대로c[1] = ["a", "b", "c"]
라고 입력해버리면, 결과는[1, ['a', 'b', 'c'], 3, 4, 5]
가 됩니다. (2중 리스트이고, 우리가 의도했던 결과가 아니지요.)
② 그런데 범위 인덱싱을 통해서c[1:2] = ["a", "b", "c"]
라고 명령어를 입력하면 그 때의 결과는[1, 'a', 'b', 'c', 3, 4, 5]
가 됩니다. 너무 편하네요ㅎㅎ
한 술 더 떠서 이렇게도 가능하네요?
c = [1, 2, 3, 4, 5]
a = ["a", "b", "c"]
c[1:1] = a
print(c)
>>> [1, "a", "b", "c", 2, 3, 4, 5]
재미있는 트윅이네요.
왜냐면 리스트 특정 인덱스 위치에 리스트를 삽입할 때
보편적으로 list.insert를 사용하지만,
②의 케이스처럼 flatten하게 삽입되지 않고,
①의 케이스와 동일하게 삽입되기 때문입니다.
이중리스트를 flatten 하게 만들려면 아래처럼 번거롭게 itertools를 이용하거나
리스트컴프리헨션이나, lambda, reduce 같은 기법을 써야 하거든요..
>>> c = [1, 2, 3, 4, 5]
>>> a = [1, 2, 3]
>>> c.insert(3, a)
>>> print(c)
[1, 2, 3, [1, 2, 3], 4, 5]
>>> import itertools
>>> print(list(itertools.chain.from_iterable(c)))
[1, 2, 3, 1, 2, 3, 4, 5]
써먹을 곳이 많은 팁이네요.
2
좋은사람
지식공유자2023.03.17
안녕하세요.
c 안에 리스트의 1부터 1(2-1 = 1) 까지 범위에 a, b, c 를 삽입하는 코드예요
즉 1부터니까 2번째(0부터 시작이니 1은 2번째) 부터 a,b,c 순서대로 삽입되겠죠?
처음 배우시면 헷갈려하는 부분이니까 결과 값 위주로 확인 해보시면 될 것 같아요!
sykb7000
질문자2023.03.22
안녕하세요, 제가 질문 해놓고도 며칠 지나니 무슨 말인지 몰라 강의 2회독 했습니다. 이제는 제 질문도 이해되고 답변도 정확히 이해했습니다. 감사합니다.
답변 2