ハイフンで分割された複合語を2つの個別の単語に分割する方法


8

次のリストがあります

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

以下を使用してハイフンを削除しました

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

私が得た結果

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

理想的に欲しい結果は

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

これを最もpythonic(効率的な方法)で実現するにはどうすればよいですか?


回答:



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

list2:

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

1

これは、中間データ構造を構築する必要なく、単一のリスト内包で実行できます。

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

出力あり

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

1

醜いものから美しいものへ

醜いよりも美しい方がいいです。

しかし、通常、醜いコードから美しいコードに移行することにはやりがいがあります。したがって、最初にloopsを使用してこの問題を解決し、次にloop-yソリューションをいくつかのステップで1つのライナーにマッサージします。

最初の試み

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

2回目の試み

ループの直前の割り当てを回避するためにsublist、内部forループのヘッダーを分割することで、より適切に実行できます。

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

そして最後の法律のために...

ループがイテレート-ザ-アペンド形式になっているので、便利にそれをワンライナーにマッサージできます

res = [subitem for item in list1 for subitem in item.split("-")]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.