• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

코드 뜻을 잘 모르겠어요

23.03.17 14:44 작성 조회수 210

1

c[1:2] = ['a', 'b', 'c'] 

이 코드를 한국말로 풀어 설명하면 어떻게 되나요?

c의 1번째(두번째) 값부터 1개의 값을 []로 변경하라 이건가요?

그래서 결국에는 2번째 값을 []로 변경하라는 건가요?

답변 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]

써먹을 곳이 많은 팁이네요.

sykb7000님의 프로필

sykb7000

질문자

2023.03.23

자세한 답변 감사합니다. 이해가 잘돼요!

2

안녕하세요.

c 안에 리스트의 1부터 1(2-1 = 1) 까지 범위에 a, b, c 를 삽입하는 코드예요

즉 1부터니까 2번째(0부터 시작이니 1은 2번째) 부터 a,b,c 순서대로 삽입되겠죠?

처음 배우시면 헷갈려하는 부분이니까 결과 값 위주로 확인 해보시면 될 것 같아요!

sykb7000님의 프로필

sykb7000

질문자

2023.03.22

안녕하세요, 제가 질문 해놓고도 며칠 지나니 무슨 말인지 몰라 강의 2회독 했습니다. 이제는 제 질문도 이해되고 답변도 정확히 이해했습니다. 감사합니다.