我有一个这样的清单:
yarn logs -applicationId nnn
我想合并它看起来像这样:
list = ['BHX', 'AR', 'DEFab', 'ABR', 'DEFyr', 'HYt', 'wqw', 'DEF-a']
所以基本上我想合并连续元素,当满足短语'DEF'时,它是最后一个元素,并且每个下一个元素创建另一个元素,直到再次满足DEF。它肯定看起来像循环的地方,我一直在考虑.append的东西,也许.next,也许itertools也可以在这里使用,但我不知道如何让它正常工作。
另外,如果元素没有包含'DEF',我想要合并没有空格的元素,当最后一个元素包含'DEF'时,我想要空格合并。
答案 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)