So teilen Sie ein zusammengesetztes Wort, das durch einen Bindestrich geteilt wird, in zwei einzelne Wörter


8

Ich habe die folgende Liste

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

Ich habe Folgendes verwendet, um den Bindestrich zu entfernen

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

Das Ergebnis habe ich bekommen

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

Das Ergebnis, das im Idealfall gewünscht wird, ist

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

Wie kann ich dies auf die pythonischste (effizienteste Weise) erreichen?


Antworten:


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

Drucke:

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

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

list2:

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

1

Dies kann mit einem einzigen Listenverständnis erfolgen, ohne dass Sie dazwischenliegende Datenstrukturen erstellen müssen:

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

mit Ausgabe

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

1

Von hässlich zu schön

Schön ist besser als hässlich.

Aber es lohnt sich normalerweise, von hässlichem Code zu schönem Code zu wechseln. Also werden wir angreifen , dieses Problem unter Verwendung eines ersten Schleifen , und dann werden wir die Massage Loop-y - Lösung in einem Einzeiler in mehreren Schritten.

Ein erster Versuch

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

Ein zweiter Versuch

Wir können es besser machen, indem wir sublistden Header der inneren forSchleife aufteilen, um die Zuweisung kurz vor der Schleife zu vermeiden.

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

Und für die Schlussakte ...

Jetzt, da wir unsere Schleife in iterierter und dann anhängender Form haben, können wir sie bequem in einen Einzeiler einmassieren.

res = [subitem for item in list1 for subitem in item.split("-")]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.