2015-06-22 16 views
6

Mam listę listy Pythona w następujący sposób. Chcę spłaszczyć go do pojedynczej listy.Usuń "u" z listy pytonów

l = [u'[190215]'] 

Próbuję.

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

Okazuje listę do [u'[', u'1', u'9', u'0', u'2', u'1', u'5', u']']

Jak usunąć u z listy.

+0

wyjściowego, takiego jak l = [ '[190215]'] ?? –

+1

'l' jest pojedynczą listą, składającą się z jednego elementu, a ten element jest typu' unicode'. Jest to ciąg, który wygląda jak "[190215]", nie jest to lista, której elementem jest liczba '190215'. Czy możesz dokładnie powiedzieć, czego oczekujesz od wyjścia? –

Odpowiedz

2

W aktualnym kodem, jesteś iteracji na sznurku, który reprezentuje listę, stąd można uzyskać poszczególne znaki.

>>> 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']'] 

Wydaje mi się, chcesz przekonwertować wewnętrzną reprezentację ciąg listy, do listy spłaszczonym, więc proszę bardzo:

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

Powyższy będzie działać tylko wtedy, gdy wszystkie wykazy wewnętrzne są ciągi:

>>> 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

Numer u oznacza ciąg znaków, który powinien być idealnie czysty. Ale jeśli chcesz przekonwertować unicode na str (który po prostu reprezentuje zwykłe bajty w Pythonie 2), możesz encode go użyć kodowania znaków, takiego jak utf-8.

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

można przekonwertować ciąg Unicode do normalnego z str:

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

użytku [str(item) for item in list]

przykład

>>> 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

nie działa w moim przypadku .... – Bhuro

+0

'result1.append ([str (I) I w linii])' UnicodeEncodeError: 'ascii' codec nie można zakodować znaków w pozycji 56-59: nie porządkowej w zakresie (128) – Bhuro

+0

Oryginalne dane, które chcę przekonwertować na zwykły ciąg plik csv >> wynik '[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 ' ""'] '..... jak pliku CSV >> wynik' [ "0000211504512150", "nowy", "27.95", "sdjfgjdshf", "0", "false" , "", "", "adfgugfius708vs", "FBR", "FALSE", "NOT_PUBLISHED", ""] – Bhuro