Como dividir uma palavra composta dividida por hífen em duas palavras individuais


8

Eu tenho a seguinte lista

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

Usei o seguinte para remover o hífen

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

O resultado que obtive

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

O resultado que o ideal é querer é

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

Como posso fazer isso da maneira mais pitônica (eficiente)


Respostas:


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

Impressões:

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

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

list2:

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

1

Isso pode ser feito com uma única compreensão da lista, sem a necessidade de construir estruturas de dados intermediárias:

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))

com saída

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

1

De Feio a Bonito

Bonito é melhor que feio.

Mas geralmente é gratificante passar de um código feio para um código bonito. Portanto, atacaremos esse problema primeiro usando loops e depois massagearemos a solução loop-y em uma linha em várias etapas.

Uma primeira tentativa

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

Uma segunda tentativa

Podemos fazer melhor dividindo sublisto cabeçalho do forloop interno , para evitar a atribuição logo antes do loop.

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

E para o ato final ...

Agora que temos nosso loop na forma de iterar e depois acrescentar , podemos massagear convenientemente em uma única linha.

res = [subitem for item in list1 for subitem in item.split("-")]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.