合并列表中的元素,直到出现某些文本

时间:2018-03-24 15:25:28

标签: python

我有一个这样的清单:

yarn logs -applicationId nnn

我想合并它看起来像这样:

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

所以基本上我想合并连续元素,当满足短语'DEF'时,它是最后一个元素,并且每个下一个元素创建另一个元素,直到再次满足DEF。它肯定看起来像循环的地方,我一直在考虑.append的东西,也许.next,也许itertools也可以在这里使用,但我不知道如何让它正常工作。

另外,如果元素没有包含'DEF',我想要合并没有空格的元素,当最后一个元素包含'DEF'时,我想要空格合并。

3 个答案:

答案 0 :(得分:0)

这可行:

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_list_final只是将DEF替换为DEF,即它会添加一个空格, if 表示字符串不为空(否则会跳过它)

答案 1 :(得分:0)

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

iex(3)> :binary.at "hello", 2
108
iex(4)> <<108>>
"l"
iex(5)> :binary.at "πr²", 2
114
iex(6)> <<114>>
"r"

答案 2 :(得分:0)

另一个带有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)