Как удалить unicode в списке

Я хочу удалить строку из Юникода из списка, например, в аэропорты [u'KATL, u'KCID]

ожидаемый результат

[KATL, KCID]

Следуя приведенной ниже ссылке

Разделите все элементы строкового списка

Пробовал одно из решений

my_list = ['this \ n', 'is \ n', 'a \ n', 'list \ n', 'of \ n', 'words \ n']

map (str.strip, my_list) ['this', 'is', 'a', 'list', 'of', 'words']

получена следующая ошибка

TypeError: дескриптор 'strip' требует объекта 'str', но получил 'unicode'

Во-первых, я настоятельно рекомендую вам перейти на Python 3, который обрабатывает строки Unicode как первоклассные граждане (все строки являются строками Unicode, но они называются str ).

Но если вам нужно заставить его работать в Python 2, вы можете unicode строки unicode с помощью unicode.strip (если ваши строки являются истинными строками Unicode):

 >>> lst = [u'KATL\n', u'KCID\n'] >>> map(unicode.strip, lst) [u'KATL', u'KCID'] 

Если ваши строки в unicode ограничены подмножеством ASCII, вы можете преобразовать их в str с помощью:

 >>> lst = [u'KATL', u'KCID'] >>> map(str, lst) ['KATL', 'KCID'] 

Обратите внимание, что это преобразование не будет выполнено для строк, отличных от ASCII. Чтобы кодировать коды Unicode как str (строка байтов), вы должны выбрать свой алгоритм кодирования (обычно UTF-8) и использовать .encode() для своих строк:

 >>> lst = [u'KATL', u'KCID'] >>> map(lambda x: x.encode('utf-8'), lst) ['KATL', 'KCID'] 

Список listcomp кажется самым простым решением:

 [s.strip() for s in my_list] 

Если вы хотите использовать карту, я бы использовал лямбда, чтобы получить собственную личную функцию объекта, вместо того, чтобы требовать, чтобы это была strip которая была доставлена ​​одной конкретной библиотекой.

 map(lambda s: s.strip(), my_list) 

Единственным надежным преобразованием строки юникода в байтовую строку является ее кодирование в приемлемую кодировку (наиболее распространенными являются ascii, Latin1 и UTF8). По определению UTF8 может кодировать любой символ юникода, но в строке вы найдете символы не ascii, а размер в байте больше не будет числом (unicode) символов. Latin1 может представлять большинство символов западноевропейских языков с отношением 1 байт на символ, а ascii – набор символов, которые всегда правильно представлены.

Если вы хотите иметь возможность обрабатывать строки, содержащие символы, которые не представлены в выбранной кодировке, вы можете использовать параметр errors='ignore' чтобы просто удалить их или errors='replace' чтобы заменить их на заменяющий символ , часто ? ,

Поэтому, если я правильно понял ваше требование, вы можете перевести список строки unicode в список строк байта с помощью:

 [ x.encode('ascii', errors='replace') for x in my_list ]