有条件地合并列表

2 python merge conditional list

说我有两个清单

[16, 0, 0, ';', 17, 0, 2, ';', 0, 2, 1, ';']
  [-1, 0, ';', 0, -2, ';', -2, -1, ';']
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来合并这些列表元素有条件地满足';' 字符比单独迭代它们并组合它们?

输出应该是

[16, 0, 0, -1, 0, ';', 17, 0, 2, 0, -2, ';', 0, 2, 1, -2, -2,';']
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 6

def get_part(lst,sep=';'):
    out = []
    for i in lst:
        if i == sep:
           yield out
           out = []
        else:
           out.append(i)
Run Code Online (Sandbox Code Playgroud)

现在我们可以将您的列表压缩:

merged = []
for l1,l2 in zip(get_part(list1),get_part(list2)):
    merged.extend(l1)
    merged.extend(l2)
    merged.append(';')
Run Code Online (Sandbox Code Playgroud)

当然,在它的核心,这基本上是迭代它们并结合......所以在回答你的问题时,我认为没有更好的方法.


也许存储列表的更好方法是将它们存储为列表列表 - 例如:

list1 = [[16, 0, 0], [ 17, 0, 2], [ 0, 2, 1] ]
Run Code Online (Sandbox Code Playgroud)

像这样存储,你可以这样做:

merged = [ l1 + l2 for l1,l2 in zip(list1,list2) ]
Run Code Online (Sandbox Code Playgroud)