Come dividere gli elementi di un elenco?


85

Ho una lista:

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

Come posso eliminare il \te tutto dopo per ottenere questo risultato:

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

Risposte:


113

Qualcosa di simile a:

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

Quasi lo capisco. Qual è l'1 all'interno dell'argomento per dividere facendo? Lo stesso per quello che presumo sia l'indice 0 dopo le parentesi. Si tratta di creare una nuova lista utilizzando l'elemento zeroeth di quello che ero stato io? Quindi l'1 è solo un'altra divisione, eliminando efficacemente il resto della stringa come voleva l'OP?
Malik A. Rumi

2
Poiché l'elenco contiene stringhe, la variabile i è una stringa. Quindi i.split ('\ t', 1) chiama il metodo split () delle stringhe. Secondo la documentazione , il primo parametro di questo metodo è la stringa per cui suddividere e il secondo è il numero massimo di divisioni da eseguire. Il metodo restituisce l'elenco di stringhe risultante dall'esecuzione della divisione, quindi "[0]" restituisce la prima stringa di divisione nell'elenco dei risultati.
jcl

2
Quando l'ho provato per il mio codice, ho restituito un errore che indicava che l'oggetto "list" non ha l'attributo "split". Sono confuso su come aggirare questo problema.
keitereth24

1
@ keitereth24, elenco di stringhe romano diviso. Potresti avere un elenco di elenchi
AAI

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

9

Prova a scorrere ogni elemento dell'elenco, quindi a dividerlo nel carattere di tabulazione e ad aggiungerlo a un nuovo elenco.

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

5
Funziona, ma la comprensione delle liste è un modo molto migliore per farlo
dave

6

Non utilizzare l'elenco come nome della variabile. Puoi anche dare un'occhiata al seguente codice:

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]

O modifica sul posto:

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

2

Ho dovuto dividere un elenco per l'estrazione delle funzionalità in due parti lt, 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.