python - 根据条件连接列表中的元素

标签 python list concatenation

假设我们有列表

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)

我更多地考虑了一个“聪明的”单行解决方案,使用 reducegroupbytakewhile 或“join-and” -split” 解决方案,就像您拥有的解决方案一样,但如果它们完全有效,它们只会使事情变得更加复杂。我认为这是其中一种情况,如果您想要一个单行代码,您应该只为它定义一个函数。

关于python - 根据条件连接列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65766786/

相关文章:

python - 有没有办法确保函数被覆盖?

python - 如何随机化列表以满足条件

excel - 将多个值写入一个单元格 - VBA

c - 在 C 中声明字符串而不给出大小

Python - 读取/解析二进制文件

python - 计算数据库中的记录数: Django

c++ - 如何正确使用remove_if?

list - 使用 foldr 将列表分成指定大小的子列表

c++ - 如何查找列表是否是另一个列表的子集?

c# - 如何使用 linq 加入多对多关系