Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

P.146 에서 질문 드립니다. #52

Closed
hwangjeongwoo opened this issue Nov 4, 2020 · 4 comments
Closed

P.146 에서 질문 드립니다. #52

hwangjeongwoo opened this issue Nov 4, 2020 · 4 comments

Comments

@hwangjeongwoo
Copy link

안녕하세요.

P.146에서
s[:] = s[::-1] 코드는 파이참에서 아래와 같은 error가 발생하는데,
리트코드에서는 사용 가능하다고 말씀하신 것으로 이해하였습니다.

이건 리트코드의 문제인지,
아니면 python 관련하여 제가 모르는 부분에 의해 발생하는 차이인지 문의 드립니다.

Traceback (most recent call last):
File "C:/Users/User/PycharmProjects/pythonProject/main.py", line 21, in
s[:] = s[::-1]
TypeError: 'str' object does not support item assignment

감사합니다.

@HxH2H
Copy link

HxH2H commented Nov 5, 2020

제가 답글을 남기는게 조금 주제 넘을 수도 있지만 제가 아는 선에서 말씀을 드리자면 해당 오류는 자료형이 맞지 않거나 함수 호출 규약을 틀렸을 경우에 나타나는 오류로 알고 있습니다. 예를 들어 s = ["h","e","l","l","o"] 이런식의 문자 배열 형태를 가지고 있어야 s[:] = s[::-1] 와 같은 슬라이싱이 가능하다고 생각합니다.

제가 글쓴분의 전체적인 코드를 알 수 없어 정확하게 답변은 불가능 하지만 간단하게 예시를 들자면,
s = "hello"
위와 같은 경우에는 s[0] 또는 s[1] 그리고 s[1:3] 과 같은 슬라이싱은 가능하지만 s[:] = s[::-1] 와 같은 문자열 변경은 불가능합니다.
위와 같은 형식으로 코드를 사용하셨다면 s = s[::-1] 로 하시면 오류없이 실행이 됩니다.

s = ["h","e","l","l","o"]
s[:] = s[::-1]
이런 경우처럼 입력값을 문자 배열로 사용하셨다면 가능합니다.
부족한 설명 들어주셔서 감사합니다.
(죄송합니다 저의 설명에 오류가 있어 수정 하였습니다.)

@hwangjeongwoo
Copy link
Author

네, 답변 감사합니다.

말씀하신 것처럼 저는 문자열에 대한 슬라이싱인 줄 알았는데,
지금 책을 다시 보니 다음 문구를 제대로 못봤네요.
"만약 입력값이 문자열이라면 앞서 살펴본 바와 같이 문자열 슬라이싱을 사용할 수 있다.
슬라이싱은 리스트에도 사용할 수 있으며, 성능 또한 매우 좋다.
s = s[ : :-1]"

@likejazz
Copy link
Collaborator

likejazz commented Nov 8, 2020

@legendhangkali 답변 감사드립니다.
말씀하신대로 책 p146에서 sList입니다. 그래서 s[:] = s[::-1]가 가능하지만 아마 @hwangjeongwoo 님이 작성하신 코드에서는 sstr로 선언한 것으로 보입니다. str은 불변 객체(immutable object, p110 참고)로 변수내의 값을 조작할 수 없습니다. s = s[::-1] 이런 형태로 완전한 재할당만 가능합니다.

감사합니다.

@hwangjeongwoo
Copy link
Author

네, 확인 감사드립니다!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants