2011-07-14 37 views
46

Sé que esta es una pregunta bastante básica, pero soy nuevo en Python y no puedo encontrar la manera de resolverlo.elementos divididos de una lista en python

Tengo una lista:

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

y quiero borrar el '\ t' y todo después. Estaba pensando en dividir cada elemento en '\ t' para poder eliminar todos los demás elementos de la lista. Sin embargo, cuando intento hacer list[0:].split('\t') obtengo AttributeError: el objeto 'list' no tiene atributo 'split'. También traté de convertir toda la lista en una cadena, pero eso trajo muchos otros problemas. Cualquier sugerencia sera apreciada.

+6

explicación de por qué su código no funcionaba (no me gusta código sólo respuestas a principiantes): 'list [0:]' devuelve una lista, por lo que no puede usar 'split', una función de' str', en ella. Tienes que recorrer cada elemento y dividirlo por separado, ya sea con un para o un [listado de comprensiones] (http://docs.python.org/tutorial/datastructures.html#list-comprehensions) – Jacob

+0

gracias por la explicación. muy apreciado. – user808545

+0

Hoy aprendí, siempre hay una manera más fácil de hacer lo que quiero en python – espais

Respuesta

52

Algo así como:

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

Casi entiendo esto. ¿Cuál es el 1 dentro del argumento para dividir haciendo? Lo mismo para lo que supongo que es el índice 0 después de los parens. ¿Esto está creando una nueva lista usando el elemento cero de lo que había sido yo? Entonces, ¿el 1 es solo otra división, efectivamente eliminando el resto de la cadena como el OP quería? –

+0

Como 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] (https://docs.python.org/2/library/stdtypes.html#str.split), el primer parámetro de este método es la cadena para dividir y el segundo es el número máximo de divisiones actuar. El método devuelve la lista de cadenas resultante de realizar la división, por lo que "[0]" devuelve la primera cadena dividida en la lista de resultados. – jcl

+1

Cuando probé esto para mi propio código, devolvió un error de que el objeto 'list' no tiene atributo 'split'. Estoy confundido sobre cómo solucionar esto. – keitereth24

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

Trate iteración a través de cada elemento de la lista, a continuación, partiéndolo en el carácter de tabulación y agregarlo a una lista nueva.

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

Esto funciona, pero la lista de comprensiones es una forma mucho mejor de hacerlo – dave

+0

No estaba familiarizado con ese método, gracias por la sugerencia. – caltangelo

4

No utilice la lista como nombre de variable. Puede echar un vistazo al siguiente código también:

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

for i,x in enumerate(clist): 
    if '\t' in x: 
     clist[i] = x[:x.index('\t')] 
-3
sentences = ("The cat ate a big mouse. This was becasue the mouse was annoying him") 

import re 

liste = re.findall(r"[\w']+|[.,!?;]", sentences) 

nodu = [] 
for x in liste: 
if x not in nodu: 
    nodu.append(x) 
print(nodu) 

pos = [] 
for word in liste: 
if word in nodu: 
    pos.append(nodu.index(word)+1) 
print(pos) 

lpos = [] 
for word in liste: 
lpos.append(liste.index(word)+1) 

nodus = (str(nodu)) 
file=open("t3.txt","w") 
file.write(nodus) 
file.write("\n") 
file.write(str(pos)) 
file.close() 



for number in lpos: 
for word in liste: 
    number = word 
    print(number) 
break 
Cuestiones relacionadas