假设我们有列表
L = ['a', '!b', '!c', 'd', 'e', '!f', 'g', 'h']
如果每个元素以 !
开头,我们希望将其与前一个元素连接起来。
预期输出:
M = ['a!b!c', 'd', 'e!f', 'g', 'h']
这行得通,但是将列表join
成一个字符串,然后将字符串重新拆分成一个列表可能过于复杂:
M = ''.join(('' if l.startswith('!') else '\n') + l for l in L).splitlines()[1:]
# ['a!b!c', 'd', 'e!f', 'g', 'h']
是否有更简单的方法来根据条件('!' in l
)连接列表中的元素?
最佳答案
可能您正在寻找单行代码,但这个不太复杂的循环怎么样?
L = ['a', '!b', '!c', 'd', 'e', '!f', 'g', 'h']
M = []
for x in L:
if x.startswith("!"):
M[-1] += x
else:
M.append(x)
# ['a!b!c', 'd', 'e!f', 'g', 'h']
如果您更喜欢简短而不是可读,您可以使用 pop
...
for x in L:
M.append(M.pop() + x if x.startswith("!") else x)
我更多地考虑了一个“聪明的”单行解决方案,使用 reduce
、groupby
、takewhile
或“join-and” -split” 解决方案,就像您拥有的解决方案一样,但如果它们完全有效,它们只会使事情变得更加复杂。我认为这是其中一种情况,如果您想要一个单行代码,您应该只为它定义一个函数。
关于python - 根据条件连接列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65766786/