Как изменить данные в контейнере во время итерации в python

1

В следующем примере:

container = [ (1, "a") , 
              (40, "b") ,
              (24, "c") ,  #we intend to change this
              (103, "d")
            ]

for k,v in container:
    if k == 24:
        v += " good"

print container

Пара данных (24, "c") в контейнере по- прежнему останется прежним значением и не будет изменена на (24, "c хорошо"). Каким образом можно было бы изменить его на (24, "c хорошо"), как предполагалось во время итерации?

Я использую python 2.7, но примеры 3.x также приветствуются.

Благодарю.

  • 0
    Соответствующий: stackoverflow.com/questions/1637807/…
  • 1
    v не указатель, и кортежи неизменны. Второй пункт является важным, и причина того, что все правильные ответы заменяют весь кортеж, а не только одно значение.
Показать ещё 1 комментарий
Теги:

2 ответа

6
Лучший ответ

Вы можете использовать enumerate() отслеживание индекса элемента контейнера, на который вы смотрите:

for i, (k,v) in enumerate(container):
    if k == 24:
        container[i] = (k, v+" good")
  • 0
    Это работает.
  • 0
    Благодарю. Это работает отлично.
1

Немного пошутил. Исправлено

container = [ (1, "a") , 
                  (40, "b") ,
                  (24, "c") ,  #we intend to change this
                  (103, "d")
                ]

for k, n in enumerate(container):
    if n[0] == 24:
        container[k] = (n[0], n[1] + " good")

print container
  • 0
    Это не работает, потому что n - это кортеж, а container[n] не имеет смысла (в словах Python: «TypeError: индексы списка должны быть целыми числами, а не кортежем»)
  • 0
    правда .... должен быть диапазон (len (контейнер)), может быть? и нужен контейнер [n] [0] и т. д.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню