¿Cómo dividir elementos de una lista?

84

Tengo una lista:

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

¿Cómo puedo eliminar el \ty todo después para obtener este resultado?

['element1', 'element2', 'element3']
user808545
fuente

Respuestas:

110

Algo como:

>>> l = ['element1\t0238.94', 'element2\t2.3904', 'element3\t0139847']
>>> [i.split('\t', 1)[0] for i in l]
['element1', 'element2', 'element3']
Bodnarchuk romano
fuente
Casi entiendo esto. ¿Qué hace el 1 dentro del argumento para dividir? Lo mismo para lo que supongo que es el índice 0 después de los parens. ¿Es esto crear una nueva lista usando el elemento cero de lo que había sido i? Entonces, ¿el 1 es solo otra división, eliminando efectivamente el resto de la cadena como quería el OP?
Malik A. Rumi
2
Dado que la lista contiene cadenas, la variable i es una cadena. Entonces i.split ('\ t', 1) llama al método split () de cadenas. Según la documentación , el primer parámetro de este método es la cadena por la que se dividirá y el segundo es el número máximo de divisiones a realizar. El método devuelve la lista de cadenas que resultan de realizar la división, por lo que "[0]" devuelve la primera cadena dividida en la lista de resultados.
jcl
2
Cuando probé esto para mi propio código, devolvió un error de que el objeto 'lista' no tiene ningún atributo 'dividir'. Estoy confundido sobre cómo solucionar esto.
keitereth24
1
@ keitereth24, Roman lista dividida de cadenas. Puede tener una lista de la lista
AAI
35
myList = [i.split('\t')[0] for i in myList] 
Dave
fuente
9

Intente recorrer cada elemento de la lista, luego dividirlo en el carácter de tabulación y agregarlo a una nueva lista.

for i in list:
    newList.append(i.split('\t')[0])
caltangelo
fuente
5
Esto funciona, pero las listas por comprensión son una forma mucho mejor de hacer esto
dave
6

No use la lista como nombre de variable. También puede echar un vistazo al siguiente código:

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 edición in situ:

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

Tuve que dividir una lista para la extracción de características en dos partes 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
Max Kleiner
fuente