2016-03-30 4 views
0

Ich möchte alle Zeichenfolgen, die Wörter in einem Array enthalten, in Ints konvertieren.Wie konvertiere ich ein Array von Strings in eine Liste von Zahlen?

Die Liste ist:

['Met', 'Mod', 'Goa', 'Con', 'Bac', 'Bac', 'Bac', 'Mod', 'Mod', 'Bac', 
'Bac', 'Bac', 'Bac', 'Bac', 'Goa', 'Mod', 'Bac', 'Bac', 'Goa', 'Mod', 
'Mod', 'Mod', 'Mod', 'Bac'] 

I Met zu 1, Mod zu 2, Goal-3, Con-4 und Bac-5 zuweisen möchten.

Wie kann ich die Liste in diese:

['1', '2', '3', '4', '5', '5', '5', '2', '2', '5', '5', '5', '5', '5', 
'3', '2', '5', '5', '3', '2', '2', '2', '2', '5'] 

Antwort

5

ein Wörterbuch verwenden.

d = {'Met':1, 'Mod':2, 'Goa':3, 'Con':4, 'Bac':5} 
l = ['Met', 'Mod', 'Goa', 'Con', 'Bac', 'Bac', 'Bac', 'Mod', 
    'Mod', 'Bac', 'Bac', 'Bac', 'Bac', 'Bac', 'Goa', 'Mod', 
    'Bac', 'Bac', 'Goa', 'Mod', 'Mod', 'Mod', 'Mod', 'Bac'] 
new_list = list(map(d.get, l)) 

Ergebnis:

>>> new_list 
[1, 2, 3, 4, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 3, 2, 5, 5, 3, 2, 2, 2, 2, 5] 

Bitte beachte, dass ich jedes Schlüsselwort zu einer Nummer zugewiesen haben wie Sie eher angefordert als zu einer Zeichenfolge, die eine Reihe wie Sie demonstriert.

+0

Dies passt nicht zu meinem inte Problemstellung, die bei der Zuordnung von Zahlen zu Strings dynamischer sein sollte. – cdlane

+0

@cdlane - Ich denke deine Interpretation des Problems ist absolut 100% falsch. Das OP sagte "Ich möchte Met 1 zuweisen, Mod 2, Ziel 3, Con bis 4 und Bac bis 5", "nicht" Ich möchte jedes Wort der 1-indizierten Position seines ersten Auftretens in der ursprüngliche Liste. " – TigerhawkT3

+0

Ich denke, die Tatsache, dass die ersten fünf Elemente zufällig und in der beschriebenen Reihenfolge vorkommen, lässt diese Interpretation angesichts des Titels und des ersten Satzes des Problems offen. Ich denke, wir werden warten müssen, bis das OP eingewogen hat. – cdlane

-1

Compute das Wörterbuch und Zahlen, während die Fäden durchzogen ist:

strings = ['Met', 'Mod', 'Goa', 'Con', 'Bac', 'Bac', 'Bac', 'Mod', 'Mod', 'Bac', 'Bac', 'Bac', 'Bac', 'Bac', 'Goa', 'Mod', 'Bac', 'Bac', 'Goa', 'Mod', 'Mod', 'Mod', 'Mod', 'Bac'] 

dictionary = dict() 

number = 1 

numbers = list() 

for string in strings: 
    if string not in dictionary: 
     dictionary[string] = number 
     number += 1 
    numbers.append(dictionary[string]) 

Ergebnis ist:

>>> numbers 
[1, 2, 3, 4, 5, 5, 5, 2, 2, 5, 5, 5, 5, 5, 3, 2, 5, 5, 3, 2, 2, 2, 2, 5] 

Die Abbildung, die aus dem Wörterbuch erhalten kann, wurde berechnet werden:

>>> dictionary 
{'Met': 1, 'Con': 4, 'Goa': 3, 'Bac': 5, 'Mod': 2} 
+1

Korrigieren Sie mich, wenn ich falsch liege, aber gehen Sie über die "Liste" und eine Reihe ihrer Indizes rückwärts, weil die ersten fünf Elemente in der "Liste" nur zufällig Indizes haben (vorausgesetzt, 1-Indizierung) mappen, die falschen wegwerfen, indem Sie sie überschreiben? – TigerhawkT3

+0

Nein @ TigerhawkT3, ich habe versucht, es rückwärts laufen, so dass das erste Auftreten eines Elements in der Liste bestimmt, welchen Index es bekommt - so interpretierte ich dieses Problem. Höhere Abbildungen werden als Nebeneffekt weggeworfen. Es hat nicht ganz funktioniert, also muss ich es mit einer expliziten Schleife machen. Seufzer. – cdlane

+0

Nun @ TigerhawkT3, das OP zeigte auch explizite Ausgabe mit den Zahlen als Strings innerhalb einer Liste, die Sie auf eine andere Weise zu lösen (mit denen stimme ich überein). So gibt es Spielraum in der Problembeschreibung und Beweise, dass die OP isn Es ist nicht so genau. Ich denke, wir werden sehen? – cdlane

0
l = {'Met':1, 'Mod':2, 'Goa':3, 'Con':4, 'Bac':5} 
lst = ['Met', 'Mod', 'Goa', 'Con', 'Bac', 'Bac', 'Bac', 'Mod', 'Mod', 'Bac','Bac', 'Bac', 'Bac', 'Bac', 'Goa', 'Mod', 'Bac', 'Bac', 'Goa', 'Mod', 'Mod', 'Mod', 'Mod', 'Bac'] 
new = [] 
for each in lst: 
    new.append(l[each]) 
print new 
+0

Das fügt nichts hinzu ... – TigerhawkT3

Verwandte Themen