7 Stimmen

Python Map Liste von Strings zu Integer Liste

Nehmen wir an, ich habe eine Liste

l = ['michael','michael','alice','carter']

Ich möchte sie wie folgt zuordnen:

k = [1,1,2,3]

Dabei entspricht Michael der Ziffer 1, Alice der Ziffer 2 usw. Gibt es eine Funktion in Python, mit der sich dies leicht bewerkstelligen lässt?

12voto

mathematical.coffee Punkte 54672

Werfen Sie einen Blick auf ord , die die Unicode-Nummer für ein bestimmtes Zeichen angibt:

>>> letters = ['a','b','c','d','e','f','g']
>>> [ord(x) for x in letters]
[97, 98, 99, 100, 101, 102, 103]

Sie könnten also Folgendes tun ord(x)-96 zu konvertieren a-z a 1-26 (achten Sie auf Großbuchstaben usw.).

l = ['a','b','a','c']
k = [ord(x)-96 for x in l] # [1,2,1,3]

Achten Sie auch hier auf Großbuchstaben und nicht-alphabetische Zeichen.

7voto

Omri Punkte 693

Wie wäre es mit der Verwendung von Pandas?

import pandas as pd
l = ['michael','michael','alice','carter']
pd.Series(l).astype('category').cat.codes.values

5voto

CKM Punkte 1803

Um die bearbeitete Frage zu beantworten, d. h. die Liste der Zeichenketten auf eindeutige Ganzzahlen abzubilden, muss man zunächst die eindeutigen Zeichenketten finden und dann eine 1-1-Abbildung der Zeichenketten auf Ganzzahlen in der ursprünglichen Liste der Zeichenketten vornehmen. Zum Beispiel,

s = ['michael','michael','alice','carter']

dann sind eindeutige Zeichenfolgen {'michael','alice','carter'} . Konvertieren Sie nun diese Zeichenketten in Ganzzahlen durch eine 1-1-Zuordnung wie {'michael','alice','carter'} =[1,2,3] mit Wörterbuch {'michael':1,'alice':2,'carter':3} . Im dritten Schritt wird die ursprüngliche Liste der Zeichenfolgen in einer Schleife durchlaufen, die Zeichenfolge im Wörterbuch nach der entsprechenden Ganzzahl durchsucht und die Zeichenfolge durch diese Ganzzahl ersetzt.

s=['michael','michael','alice','carter']

mydict={}
i = 0
for item in s:
    if(i>0 and item in mydict):
        continue
    else:    
       i = i+1
       mydict[item] = i

k=[]
for item in s:
    k.append(mydict[item])

Sortie :

k=[1, 1, 2, 3]

4voto

stuhpa Punkte 306

Um eine Liste von Ganzzahlen auf eine Liste von Zeichenketten abzubilden, würde ich zum Beispiel ein Wörterbuch verwenden:

> name_number = {'michael':1, 'michael':1, 'alice':2, 'carter':3}
> print len(name_number)
  3
> print name_number['alice']
  2

Beachten Sie, dass len(name_number) es 3 denn doppelte Schlüssel sind nicht erlaubt.

2voto

kindall Punkte 167554

Wenn ich Sie richtig verstehe, wollen Sie eine Liste von Zeichen nehmen und sie in ganze Zahlen umwandeln, wobei a eine 1 ist, b eine 2 usw.

l = ['a','b','a','c']
k = [ord(x.upper()) - 64 for x in l]

Werfen Sie die upper() und es spielt keine Rolle, ob sie groß- oder kleingeschrieben sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X