Python 合并列表中的元素,直到出现特定文本

Python 合并列表中的元素,直到出现特定文本,python,Python,我有这样一份清单: list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a'] merged_list = ['BHXAR DEFab', 'ABR DEFyr', 'HYtwqw DEF-a'] 我想把它合并成这样: list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a'] merged_list = ['BHXAR DEFab',

我有这样一份清单:

list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
merged_list = ['BHXAR DEFab', 'ABR DEFyr', 'HYtwqw DEF-a']
我想把它合并成这样:

list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
merged_list = ['BHXAR DEFab', 'ABR DEFyr', 'HYtwqw DEF-a']
所以基本上我想要合并连续的元素,当短语“DEF”被满足时,它是最后一个元素,并且每个下一个元素创建另一个元素,直到再次满足DEF。它看起来绝对像是循环的地方,我一直在考虑使用.append,也许。下一步,也许这里也可以使用itertools,但我不知道如何使它正常工作

另外,如果没有任何元素包含“DEF”,我希望合并没有空格的元素,如果最后一个元素包含“DEF”,则合并有空格的元素。

这可能会起作用:

mylist = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
merged_list = ''.join([i.replace(i, i+'.') if 'DEF' in i else i for i in mylist]).split('.')

merged_list_final = [x.replace('DEF', ' DEF') for x in merged_list if x]

>>> merged_list_final
['BHXAR DEFab', 'ABR DEFyr', 'HYtwqw DEF-a']
它首先将任意字符(
)添加到列表中包含
DEF
的任何项目中,将所有字符合并为一个长字符串,然后在找到该字符时将其拆分为较小的字符串。这导致:

>>> merged_list
['BHXARDEFab', 'ABRDEFyr', 'HYtwqwDEF-a', '']

然后,
merged\u list\u final
只是将
DEF
替换为
DEF
,也就是说,如果字符串不是空的,它会添加一个空格(否则会跳过它)。

下面是一个非常基本的解决方案:

list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
merged_list = []
current = ''

for s in list:
    if s.startswith('DEF'):
        merged_list.append(current + ' ' + s)
        current = ''
    else:
        current += s 

另一个是for循环

inlst = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
tem=''
olt=[]

for i in inlst:
    if str(i).startswith('DEF'):
        tem  = tem + ' '+ str(i)
        olt.append(tem)
        tem=''
    else:
        tem  = tem + str(i)

print(olt)

没有任何研究工作或尝试代码尝试一个简单的循环,使用
append
,但没有任何像
next
itertools
这样的花哨的东西。如果您尝试了,但仍然卡住,请向我们显示您尝试的代码,并告诉我们您卡住的位置。提示:使用循环建立输出字符串项,然后当您到达包含
'DEF'
的输入字符串时,完成输出字符串并将其附加到输出列表中。@artemspowl感谢您的注意。事实上,我确实试着自己编写它,并试图使用for循环,但由于我的代码没有任何意义,我认为发布它没有任何意义,但也许我应该看看它出错的原因。当然,我之前也做过研究,但我没有发现任何帖子有同样的问题,也无法根据类似的问题自己编写解决方案@罗里道顿:谢谢你的建议。我在这里使用了错误的方法,因为我尝试在列表中对a、b、c使用类似于
的内容:
而不是一个变量(
'DE'F
总是第二个或第三个)。非常感谢您的帮助。这是我的错,我使用了一个非常简单的例子,因为在我的原始文件中,我有更长的带有数字、字母和标点符号的字符串,包括(
),所以如果没有(
),一切都很好,但如果它出现,元素就会被分割。所以我使用了其他解决方案,但再次感谢您的帮助!非常感谢你的帮助!这比我想象的要简单,而且看起来我的方法非常错误,因为我实际上尝试在循环中使用三个不同的变量,在列表中使用类似于a、b、c的
,所以我似乎必须先处理基本知识:)。非常感谢您的帮助。它实际上并没有在“DEF”之前添加空格,但它也很好:)。添加了更改以包含空格,现在也添加了空格。再次感谢你的努力。