如何将由连字符拆分的复合词拆分为两个单独的单词



我有以下列表

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

我使用以下内容删除了连字符

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

我得到的结果

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

理想情况下想要的结果是

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

我怎样才能以最pythonic(最有效的方式(完成此操作

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

指纹:

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

从丑陋到美丽

美丽总比丑陋好。

但是,从丑陋的代码转向漂亮的代码通常是有益的。因此,我们将首先使用循环来解决这个问题,然后我们将通过多个步骤将loop-y解决方案按摩到单行中。

第一次尝试

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

第二次尝试

我们可以通过在内部for循环的标头中拆分sublist来做得更好,以避免在循环之前进行分配。

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

而对于最后一幕...

现在我们有了迭代然后追加形式的循环,我们可以方便地将其按摩成单行。

res = [subitem for item in list1 for subitem in item.split("-")]
list2 = []
[list2.extend(i.split("-")) for i in list1] 

列表2:

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

这可以通过单个列表理解来完成,而无需您 构造任何中间数据结构:

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']

使用yield from的变体

list1= ['Dodd-Frank', 'insurance', 'regulation']
def hyphen_split(list1):
for sublst in list1:
yield from sublst.split("-")
print(list(hyphen_split(list1)))

输出

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

最新更新