2017-11-16 7 views
-2

ich so etwas wie diese: -Korrektur über Listenelemente in einer Zeile (str int)

List = [["a","1"],["b","2"]] 

und was ich tun möchte, ist einzelne Buchstaben ganze Zahlen als ganze Zahlen halten. so sollte eine Ausgabe wie

sein
List = [["a",1],["b",2]] 
+0

was ist Ihre Eingabe und was ausgegeben wird? –

+0

'output_list = map (lambda x: [x [0], int (x [1])], eingabe_liste)' –

+0

'output = [[x [0], int (x [1])] für x in der Liste ] ' – bgse

Antwort

3

Changed question before rollback: Sortieren heterogene Liste

Es scheint, dass Sie völlig Ihre Frage geändert, nachdem die Menschen die erste Version beantwortet. Bitte tu das nicht. Sie könnten einfach eine neue Frage stellen.

Wenn Sie eine heterogene Liste sortieren möchten, können Sie eine benutzerdefinierte key angeben, die ein Tupel zurückgibt. Das erste Element ist 0 für Strings und 1 für Ganzzahlen. Auf diese Weise würden die Zeichenfolgen vor den Ganzzahlen angezeigt. Wenn das Objekt eine ganze Zahl ist, wird das zweite Element -x eingestellt, um die ganzen Zahlen in abnehmender Reihenfolge zu sortieren:

def custom_order(x): 
    if isinstance(x, int): 
     return (1, -x) 
    else: 
     return (0, x) 

print(sorted([1,2,3,4,5,"a","b","c","d"], key=custom_order)) 
# ['a', 'b', 'c', 'd', 5, 4, 3, 2, 1] 

Dieser Code soll auf Python2 und Python3 arbeiten. Es wird auf Python3 fehlschlagen, wenn ein Element weder ein String noch ein Int ist.

Original Frage: convert verschachtelt Strings Ints

Sie ein nested list comprehension mit einem ternary operator verwenden könnten zu überprüfen, ob die Zeichenfolge looks like an integer:

>>> data = [["a","1"],["b","2"]] 
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data] 
[['a', 1], ['b', 2]] 

Als Bonus es in beliebiger Reihenfolge funktionieren würde und mit Unterlisten jeder Größe:

>>> data = [["a","1"],["b","2"],["3", "c"], ["4", "5", "d"]] 
>>> [[int(s) if s.isdecimal() else s for s in l] for l in data] 
[['a', 1], ['b', 2], [3, 'c'], [4, 5, 'd']] 
+2

Dies wird mit '[['x', '⅕']] 'fehlschlagen, siehe [hier] (https://stackoverflow.com/a/24384917/7207392). –

+0

@PaulPanzer: Hervorragende Bemerkung, danke! Also wäre 'str.isdigit' richtig, oder? –

+0

Ich fürchte nein, wegen Ziffern wie '➊'. –

6

Unter der Annahme, dass Sie in einer Liste mit dem Namen „data“ gespeichert, dass Sie das tun können, fo llowing.

new_data = [[k,int(v)] for k,v in data] 

unten Siehe Details:

data = [["a","1"],["b","2"]] 
new_data = [[k,int(v)] for k,v in data] 

print new_data 

Ausgang:

[['a', 1], ['b', 2]] 
+1

Man könnte auch vorschlagen, ein Wörterbuch '{k: int (v) für k, v in Daten}' zu verwenden, weil ich eine Ahnung habe, was OP eigentlich will :) – timgeb

+1

@timgeb: Überraschung, Überraschung! : D Schau, was OP jetzt will. –

Verwandte Themen