2015-06-22 4 views
6

У меня есть список списка python следующим образом. Я хочу сгладить его в один список.Удалить 'u' из списка python

l = [u'[190215]'] 

Я стараюсь.

l = [item for value in l for item in value] 

Оказывается список до [u'[', u'1', u'9', u'0', u'2', u'1', u'5', u']']

Как удалить u из списка.

+0

выход, как L = [ '[190215]'] ?? –

+1

'l' - это единственный список, состоящий из одного элемента, и этот элемент имеет тип' unicode'. Это строка, которая выглядит как '[190215]', это не список, чей элемент - номер '190215'. Можете ли вы сказать, что именно вы ожидаете от вывода? –

ответ

2

В текущем коде, вы перебор на строку, которая представляет собой список, следовательно, вы получите отдельные символы.

>>> from ast import literal_eval 
>>> l = [u'[190215]'] 
>>> l = [item for value in l for item in value] 
>>> l 
[u'[', u'1', u'9', u'0', u'2', u'1', u'5', u']'] 

Кажется мне, вы хотите, чтобы преобразовать внутреннее представление строки списка, в уплощенную список, так что здесь вы идете:

>>> l = [u'[190215]'] 
>>> l = [item for value in l for item in literal_eval(value)] 
>>> l 
[190215] 

выше будет работать только тогда, когда все внутренние списки строк:

>>> l = [u'[190215]', u'[190216, 190217]'] 
>>> l = [item for value in l for item in literal_eval(value)] 
>>> l 
[190215, 190216, 190217] 
>>> l = [u'[190215]', u'[190216, 190217]', [12, 12]] 
>>> l = [item for value in l for item in literal_eval(value)] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/ast.py", line 80, in literal_eval 
    return _convert(node_or_string) 
    File "/usr/lib/python2.7/ast.py", line 79, in _convert 
    raise ValueError('malformed string') 
ValueError: malformed string 
8

u означает строку unicode, которая должна быть идеально подходит для использования. Но если вы хотите конвертировать unicode в str (который просто представляет простые байты в Python 2), вы можете использовать encode с использованием кодировки символов, такой как utf-8.

>>> items = [u'[190215]'] 
>>> [item.encode('utf-8') for item in items] 
['[190215]'] 
3

Вы можете конвертировать юникод в нормальную строку с str:

>>> list(str(l[0])) 
['[', '1', '9', '0', '2', '1', '5', ']'] 
2

использование [str(item) for item in list]

пример

>>> li = [u'a', u'b', u'c', u'd'] 
>>> print li 
[u'a', u'b', u'c', u'd'] 
>>> li_u_removed = [str(i) for i in li] 
>>> print li_u_removed 
['a', 'b', 'c', 'd'] 
+0

не работает в моем случае .... – Bhuro

+0

'result1.append ([str (i) для i в строке])' UnicodeEncodeError: кодек 'ascii' не может кодировать символы в позиции 56-59: порядковый номер не в диапазоне (128) – Bhuro

+0

Исходные данные, которые я хочу преобразовать в обычную строку файл csv >> result '[u '" 0000211504512150 "', u '" NEW "', u '" 27.95 "', u '" sdjfgjdshf " ', u' "0" ', u' "FALSE" ', u' "", u '""', u '"adfgugfius708vs"', u '"FBR"', u '"FALSE"', u «NOT_PUBLISHED» ', u' "" '] '..... как файл csv >> result' ["0000211504512150", "NEW", "27.95", "sdjfgjdshf", "0", "FALSE" , "", "", "adfgugfius708vs", "FBR", "FALSE", "NOT_PUBLISHED", ""] ' – Bhuro