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”之前添加空格,但它也很好:)。添加了更改以包含空格,现在也添加了空格。再次感谢你的努力。