Estoy tratando de dividir las cadenas de una lista basada en los espacios en blanco.

Mi código:

line=['abc def','ghi jk']
for x in line:
    word=x.split(' ')
print(word)

Salida esperada:

['abc','def','ghi','jk']

Pero sigo obteniendo la salida como:

['ghi','jk']

¿Adónde me equivoco?

-1
FMA 5 oct. 2019 a las 06:01

4 respuestas

La mejor respuesta

Cada vez que se ejecuta word=x.split(' '), el valor anterior de words se reemplaza por un nuevo valor. En su caso, la primera iteración del bucle crea word = ['abc','def'], y la segunda iteración lo reemplaza por word = ['ghi','jk'].

Debe almacenar el resultado de cada iteración en una nueva lista:

line = ['abc def', 'ghi jk']
result = []
for x in line:
     result.extend(x.split(' '))
print(result)
1
pauliner 5 oct. 2019 a las 03:07

Una pulcra línea:

Dada line = ['abc def', 'ghi jk']

word = [item for sublist in [elem.split() for elem in line] for item in sublist]

Entonces tienes

>>> word
['abc', 'def', 'ghi', 'jk']

¿Qué pasa aquí? El [elem.split() for elem in line] es una lista-comprensión, tomando elem.split() para cada elemento en la lista original line y colocando cada resultado en una lista.

>>> [elem.split() for elem in line]
[['abc', 'def'], ['ghi', 'jk']]

Supongamos, entonces, que nuevamente usamos la comprensión de la lista y tomamos de cada elemento de nuestra nueva lista anidada, cada elemento que tiene, y lo coloca en una lista. El procedimiento se llama aplanamiento de una lista y tiene la forma:

flattened_list = [item for sublist in nestedlists for item in sublist]
0
RoyM 5 oct. 2019 a las 03:27

Puede unir las cadenas con un espacio primero antes de dividir la cadena por espacios:

' '.join(line).split()

Esto devuelve:

['abc', 'def', 'ghi', 'jk']
1
blhsing 5 oct. 2019 a las 03:40

Dividirlo, luego aplanar

line = ['abc def','ghi jk']
temp = [s.split(' ') for s in line]
res = [c for s in temp for c in s]
print(res)

Resultado

['abc','def','ghi','jk']

O utilizando operador y reducir

import operator
from functools import reduce
line = [s.split(' ') for s in line]
res = reduce(operator.concat, line)
print(res)

Resultado:

['abc', 'def', 'ghi', 'jk']
0
N. Arunoprayoch 5 oct. 2019 a las 03:37
58245004