У меня есть список, скажем, 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
.
(Это комбинация ответов Майка Грэма и Сикоры):
Если вы просто хотите изменить значения в -place, попробуйте обычный цикл for, а не понимание списка:
for sublist in a:
sublist.append('a')
Если вы хотите оставить в покое и поместить результат в a1:
a1 = [sublist + ['a'] for sublist in a]
Как они объяснили, append
изменяет list, но возвращает None, а +
оставляет список в покое, но возвращает новый добавленный список.
оставьте a =
и используйте побочный эффект для a
:
[x.append('a') for x in a]
print a
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']]
В первом случае причина возврата [None, None, None]
заключается в том, что функция list.append
возвращает None
, и именно это значение она сохраняет в списке.
Во втором случае это происходит потому, что список является изменяемым, и каждый раз, когда вы добавляете значение, исходный список изменяется.
Что вам нужно, так это оператор добавления не на место, например +
. т.е. [x + ['a'] for x in a]
.