파이썬에서 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 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    이 코드 중 for i in temp를 보자구요! itemp의 원소를 하나씩 복사해 넣는 줄이네요. 다시 말해, 주소(객체)가 전달된 것이 아니고 값 만이 복사되어 전달된 것이므로, 이 방법으로는 값을 변경할 수 없다는 결론이 나와요.

    저것과 비슷한 코드를 사용하고 싶다면, 다음과 같은 코드를 이용해보세요. 물론 아래 코드는 어디까지나 예시로, 다른 좋은 방법도 많답니다 :)

    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']
    
    • 이런 방식으로도 할 수 있네요. 감사합니다. 임현준 2019.10.14 15:10

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)