2015-06-06 2 views
2

Мне просто интересно, что следующий фрагмент кода не работает, что должно инициализировать пустой список и «на лету» добавить начальное значение. Второй фрагмент работает. Что с этим не так? Существует ли наилучшая практика для такой инициализации?Лучшая практика добавления значения в пустой список

>>> foo = [].append(2) 
>>> print foo 
None 
>>> foo = [] 
>>> foo.append(2) 
>>> print foo 
[2] 

EDIT: Кажется, у меня возникло недоразумение в синтаксисе. Как уже указывалось ниже, append всегда возвращает None в качестве результата. Сначала я подумал, что [] вернет пустой объект списка, где append должен поместить в него первый элемент и, в свою очередь, присваивает список foo. Это было неправильно.

+2

Так почему бы не просто использовать 'foo = [2]'? Нет необходимости вообще называть 'append', когда вы можете напрямую указать начальные значения. 'list.append()' изменяет список на месте, поэтому всегда возвращает 'None'. –

+1

То, что вы пытаетесь напечатать, это '[] .append (2)', а не 'foo'. 'foo = [2]' или 'foo = []; foo.append (2) 'будет делать. – raymelfrancisco

+0

@raymelfrancisco Спасибо, что ответили на мой простой вопрос. Я не могу объяснить, почему это должно быть уменьшено. Некоторые люди, возможно, уже искали знания при кормлении грудью. Благодарю. – ferdy

ответ

2

Фактическая причина, почему вы не можете сделать что-либо из следующих

l = [].append(2) 
l = [2,3,4].append(1) 

потому, что .append() всегда возвращает None как значение функции. .append() должно быть сделано на месте.

См. here для документации по структурам данных. В общем, если вы хотите, чтобы инициализировать значение в списке делают:

l = [2] 

Если вы хотите инициализировать пустой список для использования в функции/операции сделать что-то, как показано ниже:

l = [] 
for x in range(10): 
    value = a_function_or_operation() 
    l.append(value) 

Наконец, если вы действительно хотите, чтобы сделать оценку, как l = [2,3,4].append(), используйте оператор + как:

l1 = []+[2] 
l2 = [2,3,4] + [2] 
print l1, l2 
>>> [2] [2, 3, 4, 2] 

Это, как правило, как вы инициализируете списки.

+0

Спасибо за ответ. Я уже знал, как это сделать, но я спрашивал себя, почему первый синтаксис не будет работать. – ferdy

+1

@ferdy - Я отредактировал свой ответ, чтобы включить все знания, которые у меня есть по этой теме. Первоначально мой ответ был плохо сформулирован. Надеюсь, моя отредактированная версия имеет больше смысла. –

Смежные вопросы