Wie teile ich Elemente einer Liste?


84

Ich habe eine Liste:

my_list = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']

Wie kann ich das \tund alles danach löschen , um dieses Ergebnis zu erhalten:

['element1', 'element2', 'element3']

Antworten:


110

Etwas wie:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']

Ich verstehe das fast. Was ist die 1 in dem Argument, das Split macht? Das Gleiche gilt für den Index 0 nach den Parens. Erstellt dies eine neue Liste unter Verwendung des nullten Elements dessen, was ich gewesen war? Ist die 1 dann nur eine weitere Aufteilung, wodurch der Rest der Zeichenfolge effektiv entfernt wird, wie es das OP wollte?
Malik A. Rumi

2
Da die Liste Zeichenfolgen enthält, ist die Variable i eine Zeichenfolge. Daher ruft i.split ('\ t', 1) die split () -Methode von Strings auf. Gemäß der Dokumentation ist der erste Parameter dieser Methode die Zeichenfolge, durch die geteilt werden soll, und der zweite Parameter ist die maximale Anzahl der durchzuführenden Teilungen. Die Methode gibt die Liste der Zeichenfolgen zurück, die sich aus der Durchführung der Teilung ergeben. "[0]" gibt also die erste geteilte Zeichenfolge in der Ergebnisliste zurück.
jcl

2
Als ich dies für meinen eigenen Code versuchte, gab es einen Fehler zurück, dass das 'list'-Objekt kein Attribut' split 'hat. Ich bin verwirrt, wie ich das umgehen soll.
keitereth24

1
@ keitereth24, Roman geteilte Liste der Zeichenfolge. Sie können eine Liste der Liste haben
AAI

35
myList = [i.split('\t')[0] for i in myList] 

9

Versuchen Sie, jedes Element der Liste zu durchlaufen, es dann am Tabulatorzeichen aufzuteilen und einer neuen Liste hinzuzufügen.

for i in list:
    newList.append(i.split('\t')[0])

5
Dies funktioniert, aber Listenverständnisse sind ein viel besserer Weg, dies zu tun
Dave

6

Verwenden Sie list nicht als Variablennamen. Sie können sich auch den folgenden Code ansehen:

clist = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847', 'element5']
clist = [x[:x.index('\t')] if '\t' in x else x for x in clist]

Oder direkte Bearbeitung:

for i,x in enumerate(clist):
    if '\t' in x:
        clist[i] = x[:x.index('\t')]

2

Ich musste eine Liste für die Merkmalsextraktion in zwei Teile aufteilen: lc, lc:

ltexts = ((df4.ix[0:,[3,7]]).values).tolist()
random.shuffle(ltexts)

featsets = [(act_features((lt)),lc) 
              for lc, lt in ltexts]

def act_features(atext):
  features = {}
  for word in nltk.word_tokenize(atext):
     features['cont({})'.format(word.lower())]=True
  return features
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.