파이썬에서 for문 사용해서 리스트 원소를 변경하려면 어떻게 해야 하나요?
조회수 5412회
파이썬에서 리스트 내의 원소중에 조건을 만족하는 원소는 다른 값으로 변경하려고 합니다.
temp = ['apple', 'banana', 'coke']
for i in temp:
if i == 'coke':
i = 'grape'
print(temp)
이렇게 할 경우에 저는 ['apple', 'banana', 'grape'] 가 될거라고 생각했는데 안되더라고요.
temp = ['apple', 'banana', 'coke']
i = 0
for temp[i] in range(len(temp)):
if temp[i] == 'coke':
temp[i] = 'grape'
print(temp)
이렇게 하면 문제없지만요. 첫번째 방법으로 변경할수는 없는건가요?
3 답변
-
이 코드 중
for i in temp
를 보자구요!i
로temp
의 원소를 하나씩 복사해 넣는 줄이네요. 다시 말해, 주소(객체)가 전달된 것이 아니고 값 만이 복사되어 전달된 것이므로, 이 방법으로는 값을 변경할 수 없다는 결론이 나와요.저것과 비슷한 코드를 사용하고 싶다면, 다음과 같은 코드를 이용해보세요. 물론 아래 코드는 어디까지나 예시로, 다른 좋은 방법도 많답니다 :)
temp = ['apple', 'banana', 'coke'] for i in temp: if (i == "coke"): temp[temp.index("coke")] = "grape" #temp.index("coke")는 temp에서 "coke"를 찾아요. #해당 값이 있다면 그 값의 위치를 반환해준답니다. print(temp)
-
(•́ ✖ •̀)
알 수 없는 사용자 -
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
- 제가 가장 원하던 방식이네요. 감사합니다!! 임현준 2019.10.14 15:10
- @스파게티 도움이 되셨다니 다행입니다💕 알 수 없는 사용자 2019.10.17 13:35
- 1달간 고민한게 한방에 해결되어서 감사한 마음에서 가입하고 댓글 남깁니다ㅠ 도움 많이 됐어요ㅎㅎ 감사합니다!! 알 수 없는 사용자 2020.1.17 18:47
- @이우석 도움이 되셨다니 기쁘네요ㅋㅋㅋㅋㅋ 친히 댓글까지 달아주셔서 감사할 따름입니다😆 알 수 없는 사용자 2020.2.29 18:18
-
-
왜 첫 번째 방법을 해야 하는 지 모르겠지만 결론적으로 첫 번째 방법으로는 변경할 수 없습니다. 왜냐하면 i 값은 temp에 있는 원소를 복사한 값이기 때문에 복사한 i 값을 'grape'로 변경한다 해도 원래 있던 temp 값은 변하지 않기 때문이죠. 두 번째 방법은 temp[i] 값 자체를 'grape'로 변경한 것이기 때문에 원하는 값이 출력 되는 것입니다.
a = 1, b = a, b = 2, 를 한다고 해서 a = 2가 되지는 않죠.....
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
원하시는 것은 맵핑이 아닐까 합니다.
temp = ['apple', 'banana', 'coke'] def no_soda(food) : return 'grape' if food is 'coke' else food final_realfinal_ver333 = map(no_soda, temp) # 위의 3줄과 아래 1줄은 같은 기능 # final_realfinal_ver333 = map(lambda food: 'grape' if food is 'coke' else food, temp) print(final_realfinal_ver333) # ['apple', 'banana', 'grape']
댓글 입력