Измените массив, который может содержать None, на массив, содержащий "" в python - PullRequest
4 голосов
/ 29 мая 2010

У меня есть функция python, которая получает массив с именем row.

Обычно строка содержит такие вещи, как:

["Hello","goodbye","green"]

И я печатаю это с:

print "\t".join(row)

К сожалению, иногда он содержит:

["Hello",None,"green"]

, который генерирует эту ошибку:

TypeError: sequence item 2: expected string or Unicode, NoneType found

Есть ли простой способ заменить любые элементы None на ""?

Ответы [ 3 ]

11 голосов
/ 29 мая 2010

Вы можете использовать условное выражение :

>>> l = ["Hello", None, "green"]
>>> [(x if x is not None else '') for x in l]
['Hello', '', 'green']

Немного более короткий путь:

>>> [x or '' for x in l]

Но обратите внимание, что второй метод также заменяет 0 и некоторые другие объекты на пустую строку.

1 голос
/ 29 мая 2010

Вместо массива можно использовать выражение генератора:

print "\t".join(fld or "" for fld in row)

Это заменит пустую строку для всего, что рассматривается как False (None, False, 0, 0.0, ''…).

0 голосов
/ 29 мая 2010

Вы также можете использовать встроенную функцию фильтра:

>>> l = ["Hello", None, "green"]
>>> filter(None, l)
['Hello', 'green']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...