Заменить значение None в списке?
У меня есть:
d = [1,'q','3', None, 'temp']
Я хочу заменить значение None на "None" или любую строку
ожидаемый эффект:
d = [1,'q','3', 'None', 'temp']
попробуйте заменить строку и цикл, но я получаю ошибку:
TypeError: expected a character buffer object
Ответы
Ответ 1
Используйте простое понимание списка:
['None' if v is None else v for v in d]
Демо:
>>> d = [1,'q','3', None, 'temp']
>>> ['None' if v is None else v for v in d]
[1, 'q', '3', 'None', 'temp']
Обратите внимание на тег is None
, который соответствует синглету None
.
Ответ 2
Вы можете просто использовать map
и преобразовать все элементы в строки с помощью функции str
:
map(str, d)
#['1', 'q', '3', 'None', 'temp']
Ответ 3
Используя длительный и неэффективный, но начинающий, дружественный для цикла, он будет выглядеть так:
d = [1,'q','3', None, 'temp']
e = []
for i in d:
if i is None: #if i == None is also valid but slower and not recommended by PEP8
e.append("None")
else:
e.append(i)
d = e
print d
#[1, 'q', '3', 'None', 'temp']
Только для новичков ответ @Martins более подходит в средствах власти и эффективности
Ответ 4
Понимание списка - это правильный путь, но в случае, если по самым известным вам причинам вы скорее замените его на месте, а не создаете новый список (утверждая, что список python изменен), альтернативный подход выглядит следующим образом
d = [1,'q','3', None, 'temp', None]
try:
while True:
d[d.index(None)] = 'None'
except ValueError:
pass
>>> d
[1, 'q', '3', 'None', 'temp', 'None']
Ответ 5
Запуск Python 3.6 можно сделать в более короткой форме:
d = [f'{e}' for e in d]
надеюсь, что это поможет кому-то, потому что у меня была эта проблема совсем недавно.