инициализация членов списка

Я хочу инициализировать список в python. Я не понимаю, почему приведенный ниже код не работает:

u = ['abc', 'de', 'fghi', 'jklm', 'n', ''] for item in u: item = len(item) 

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

 u = [len(item) for item in u] 

Но, мой вопрос, почему первый код не работает.

Редактировать: Я новичок в Python и программирование. К сожалению, я не понимаю некоторых частей ваших ответов. Например:
переупорядочивание в " переименование item имени в длину имени"
iterator в «item» – временная переменная, которая указывает на элемент u основанный на том, где указывается (неявный) итератор
Насколько я понимаю, мой второй пример создает new_list в памяти и присваивает значения new_list u . Независимо от предыдущих значений. Но я хочу знать, как я могу изменить значения в первом списке. благодаря

6 Solutions collect form web for “инициализация членов списка”

В первом случае вы ничего не инициализируете. «item» – временная переменная, указывающая на элемент au, на основе которого указывает (неявный) итератор. Если вы хотите инициализировать список в первом стиле, вы можете сделать это так:

 u = ['abc', 'de', 'fghi', 'jklm', 'n', ''] v = [] for item in u: v.append(len(item)) print v 

Вы переименовываете item name в длину элемента name, который был просто связан циклом. Таким образом вы не можете инициализировать list . Все, что вы делаете, это переупорядочивание переменной на каждой итерации. Ваше понимание списка – вполне приемлемый метод для инициализации list .

Вы не можете изменить содержимое списка, просто назначив новое значение имени, которое представляет запись в этом списке. Вам нужно использовать назначение индекса, например, чтобы изменить первую запись в списке на 'foo' вы можете сделать u[0] = 'foo' .

В этом случае вы можете сделать что-то вроде следующего (хотя понимание списка из вашего вопроса более чистое):

 for i, item in enumerate(u): u[i] = len(item) 

Обратите внимание: если элементы в вашем списке изменяемы, вы можете напрямую изменить элемент, вы просто не можете переназначить их. Например, со списком списков:

 u = [['a'], ['b', 'c']] for item in u: item.append(len(item)) # u is now [['a', 1], ['b', 'c', 2]] 

Причина, по которой первый код не работает, состоит в том, что item – это просто ссылка на каждый истребимый объект в последовательности u . Когда вы говорите item = len(item) вы действительно назначаете len(item) для item , но поскольку item просто действует как ссылочный указатель, указывающий на u[i] для шага i * th * в вашем цикле, t фактически меняет u[i] .

Чтобы изменить u[i] вы можете сделать список, как вы показали в своем вопросе, или сделать что-то вроде:

 for i in range(len(u)): u[i] = len(u[i]) 

Третий способ – очень полезный метод enumerate введенный в python 2.3.

 for i, item in enumerate(u): u[i] = len(item) 

Enumerate возвращает список кортежей, созданных из его аргумента (не цитируйте меня на этом … но он в основном действует как список кортежей), где каждый кортеж внутри имеет форму (index, argument [index]).

Первый код работает. Список u инициализируется в первой строке, а следующие две строки выполняются, не влияя на остальную часть кода – для них нет никакого смысла.

 u = ['abc', 'de', 'fghi', 'jklm', 'n', ''] 

Инициализирует список u с содержимым ['abc', 'de', 'fghi', 'jklm', 'n', ''] – это все, что вам нужно сделать для инициализации списка.

Линии

 for item in u: item = len(item) 

Просто привяжите item имени ко всем значениям в u сразу после перезаписи item к свойству length значения один за другим, пока интерпретатор не обработает весь список.

item – это просто имя . в цикле for :

 for item in u: 

item является ссылкой на объект, к которому относится u [i]. Другими словами, item и u[i] относятся к одному и тому же объекту.

но это утверждение:

 item = len(item) 

измените item name, чтобы обратиться к int, значение которого равно len (item).

Так что ничего не изменилось в списке u.

Понимание списка:

 u = [len(item) for item in u] 

просто создайте новый список, и имя u теперь является ссылкой на новый список.

Если вы хотите использовать для цикла, вы можете использовать оператор enumerate :

 for i, item in enumerate(u): u[i] = len(item) 

Это изменяет ссылки на элементы u по одному .

  • Список гарантированно является пустым списком, если список предшествует списку ?
  • Могу ли я создать 32-разрядную программу cx_freeze, если у меня 64-разрядная ОС?
  • Достаточно распечатать список в табличном формате
  • Объединение двух отсортированных списков в Python
  • Как отсортировать список словарей по значениям словаря в Python?
  • Список списков против использования памяти одного списка в Python
  • Список каталогов Python возвращается в шаблон Django
  • Python: список, который не перемещается
  • Python - лучший язык программирования в мире.