2015-06-22 21 views
6

Ich habe eine Python-Liste der Liste wie folgt. Ich möchte es auf eine einzige Liste reduzieren.Entfernen Sie 'u' aus einer Python-Liste

l = [u'[190215]'] 

Ich versuche es.

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

Es stellt sich die Liste [u'[', u'1', u'9', u'0', u'2', u'1', u'5', u']']

Wie die u aus der Liste zu entfernen.

+0

Ausgabe wie l = [ '[190215]'] ?? –

+1

'l' ist eine einzelne Liste, die aus einem Element besteht und das Element vom Typ 'Unicode' ist. Es ist eine Zeichenkette, die aussieht wie '[190215]', es ist keine Liste, deren Element die Nummer '190215' ist. Können Sie genau sagen, was Sie von der Ausgabe erwarten? –

Antwort

2

In Ihrem aktuellen Code, Sie auf einer Schnur iterieren, die eine Liste darstellt, somit erhalten Sie die einzelnen Zeichen.

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

Scheint mir, Ihnen die innere String-Darstellung der Liste, um eine abgeflachte Liste konvertieren möchten, so hier geht:

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

Die oben funktioniert nur, wenn alle Innenlisten sind Strings:

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

Die u bedeutet eine unicode Zeichenfolge, die perfekt in der Anwendung sein sollte. Aber wenn Sie unicode zu str konvertieren möchten (was nur einfache Bytes in Python 2 darstellt) dann können Sie encode es mit einer Zeichencodierung wie utf-8.

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

Sie können Ihre Unicode normalen Zeichenfolge mit str konvertieren:

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

Verwendung [str(item) for item in list]

Beispiel

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

funktioniert nicht in meinem Fall .... – Bhuro

+0

'result1.append ([str (i) für i in Zeile])' UnicodeEncodeError: 'Ascii' Codec kann Zeichen in Position 56-59 nicht codieren: Ordinalzahl nicht im Bereich (128) – Bhuro

+0

Die Originaldaten, die ich in normale Zeichenfolge konvertieren möchte Datei csv >> result '[u '" 0000211504512150 "', u '" NEW "', u '" 27.95 "', u '" sdjfgjdshf " ', 0' ',' 'FALSCH' ',' '' ',' '' ',' 'adfgugfius708vs' ',' 'FBR' ',' 'FALSCH' ', u '' NOT_PUBLISHED '', '' ''] '..... wie file csv >> result '[" 0000211504512150 "," NEU "," 27.95 "," sdjfgjdshf "," 0 "," FALSE " "", "", "adfgugfius708vs", "FBR", "FALSE", "NOT_PUBLISHED", ""] – Bhuro

Verwandte Themen