Изменение неизменяемого типа Python при переборе изменяемого контейнера, такого как список - PullRequest
3 голосов
/ 20 ноября 2010

Мне интересно, какой самый питоновский способ сделать следующее и заставить его работать:

strings = ['a','b']

for s in strings:  
    s = s+'c'

очевидно, что это не работает в Python, но результат, который я хочу получить -
strings = ['ac', 'bc']
Какой самый питонный способ достичь такого результата?

Спасибо за отличные ответы!

Ответы [ 3 ]

6 голосов
/ 20 ноября 2010
strings = ['a', 'b']
strings = [s + 'c' for s in strings]
3 голосов
/ 20 ноября 2010

Вы можете использовать понимание списка, чтобы создать список, который имеет следующие значения: [s + 'c' for s in strings].Вы можете изменить список на месте следующим образом:

for i, s in enumerate(strings):
    strings[i] = s + 'c'

Но я обнаружил, что довольно часто модификация на месте не требуется.Посмотрите на свой код, чтобы увидеть, если это применимо.

1 голос
/ 20 ноября 2010

Вы можете использовать функцию карты для этого.

strings = ['a', 'b']
strings = map(lambda s: s + 'c', strings)
...