Добавление объекта к спискам в понимании списка

У меня есть список, скажем, a = [[1,2],[3,4],[5,6]]

Я хочу добавить строку 'a' к каждому объекту в списке a.

Когда я использую:

 a = [x.append('a') for x in a] 

это возвращается [None,None,None].

Но если я использую:

a1 = [x.append('a') for x in a]

затем это делает что-то нечетное.

a, но нет a1 [[1,2,'a'],[3,4,'a'],[5,6,'a']].

Я не понимаю, почему первый вызов возвращается [None, None, None] ни почему вторые изменения на a вместо a1.

23
задан b4hand 16 June 2015 в 02:23
поделиться

4 ответа

(Это комбинация ответов Майка Грэма и Сикоры):

Если вы просто хотите изменить значения в -place, попробуйте обычный цикл for, а не понимание списка:

for sublist in a:
    sublist.append('a')

Если вы хотите оставить в покое и поместить результат в a1:

a1 = [sublist + ['a'] for sublist in a]

Как они объяснили, append изменяет list, но возвращает None, а + оставляет список в покое, но возвращает новый добавленный список.

4
ответ дан 29 November 2019 в 01:07
поделиться

оставьте a = и используйте побочный эффект для a :

[x.append('a') for x in a] 
print a
0
ответ дан 29 November 2019 в 01:07
поделиться

list.append мутирует сам список и возвращает None. Понимание списков предназначено для хранения результата, а это не то, что вам нужно в данном случае, если вы хотите просто изменить исходные списки.

>>> x = [[1, 2], [3, 4], [5, 6]]
>>> for sublist in x:
...     sublist.append('a')
...
>>> x
[[1, 2, 'a'], [3, 4, 'a'], [5, 6, 'a']]
33
ответ дан 29 November 2019 в 01:07
поделиться

В первом случае причина возврата [None, None, None] заключается в том, что функция list.append возвращает None, и именно это значение она сохраняет в списке.

Во втором случае это происходит потому, что список является изменяемым, и каждый раз, когда вы добавляете значение, исходный список изменяется.

Что вам нужно, так это оператор добавления не на место, например +. т.е. [x + ['a'] for x in a].

11
ответ дан 29 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: