Cómo dividir una palabra compuesta dividida por guiones en dos palabras individuales


8

Tengo la siguiente lista

list1= ['Dodd-Frank', 'insurance', 'regulation']

Usé lo siguiente para eliminar el guión

new1 =[j.replace('-', ' ') for j in list1]

El resultado que obtuve

new1= ['Dodd Frank', 'insurance', 'regulation']

El resultado que idealmente quiere es

new1= ['Dodd', 'Frank', 'insurance', 'regulation']

¿Cómo puedo lograr esto de la manera más pitónica (de manera eficiente)


Respuestas:


6
list1 = ['Dodd-Frank', 'insurance', 'regulation']
new1 = '-'.join(list1).split('-')
print(new1)

Huellas dactilares:

['Dodd', 'Frank', 'insurance', 'regulation']

1
list2 = []
[list2.extend(i.split("-")) for i in list1] 

lista2:

['Dodd', 'Frank', 'insurance', 'regulation']

1

Esto se puede hacer con una única comprensión de la lista, sin necesidad de construir estructuras de datos intermedias:

my_list = ['Dodd-Frank', 'insurance', 'regulation']

def split_hyphens(lst):
    return [i for word in lst for i in word.split("-")]

print(split_hyphens(my_list))

con salida

['Dodd', 'Frank', 'insurance', 'regulation']

1

De feo a hermoso

Hermoso es mejor que feo.

Pero generalmente es gratificante pasar de un código feo a un código hermoso. Entonces, primero atacaremos este problema usando bucles , y luego masajearemos la solución loop-y en una sola línea en varios pasos.

Un primer intento

res = []
for item in list1:
    sublist = item.split("-")
    for subitem in sublist:
        res.append(subitem)

Un segundo intento

Podemos hacerlo mejor dividiéndonos sublisten el encabezado del forbucle interno , para evitar la asignación justo antes del bucle.

res = []
for item in list1:
    for subitem in item.split("-"):
        res.append(subitem)

Y para el Acta Final ...

Ahora que tenemos nuestro bucle en forma de iterar y luego agregar , podemos masajearlo convenientemente en una sola línea.

res = [subitem for item in list1 for subitem in item.split("-")]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.