파이썬 set에 관한 질문
조회수 512회
aList = [1, 2, [1 ,2], 'c', [1, 2] ]
set 함수가 리스트 안에 중복된 값을 제거한다 라고 알고있는데
중첩된 리스트, 그리고 문자가 섞인 리스트일 경우
set 함수를 사용했을 때 unhashable 하다고 오류를 출력했습니다. list를 튜플로 변환하면 문제를 해결할 수 있을까 해서 리스트를 튜플로 바꿔 set함수를 쓴 뒤 원래의 형태로 바꿔줄 생각으로 시도하고 있는데
list(set([tuple(set(item)) for item in aList]))
'int' object is not iterable 오류가 나서 질문드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
3 답변
-
list 는 변경이 가능한 타입이라 hash. 즉 key 로써 사용할 수 없어서 그렇습니다.
하기와 같이 해보세요.
set(tuple(i) if type(i) == list else i for i in aList)
-
item 이 1 같은 경우일 때에는 set(item) 에서 에러가 발생하겠네요.
- 아. 이해했습니다 조금 더 고민해봐야겠네요.. 알 수 없는 사용자 2020.4.23 15:32
- 고수분들 답변이 리스트컴프리헨션등으로 한줄짜리가 많아서, 오히려 간단한 해법을 놓칠 때가 있어요. 쉽게쉽게 생각하세요. nowp 2020.4.23 16:05
- 좋은 말씀 감사합니다. 아이디어를 받아 직접 해봤는데 도움이 많이 됐어요 알 수 없는 사용자 2020.4.24 01:40
-
너무 길어서 이걸 의도하셨는지는 잘 모르겠습니다만...
[list(x) if isinstance(x, tuple) else x for x in set([tuple(i) if isinstance(i, list) else i for i in aList ])]
댓글 입력