将当前元素与列表的前一个元素合并/合并

时间:2018-04-30 07:58:54

标签: python

我有一个清单:

   lst=['*PF4', 'PF6', '#', 'PF2', '\PWD(5D)','PWD(30)']
                ['*PF4#', 'PF2', '\PWD(89)','PWD(31)']
                 ['*PF4', 'PF6', '#', 'PF2', '\PWD(89)','PWD(31)']

这是我尝试的代码:

             for i in lst:
                    if i.startswith("*") and i.endswith("#"): 
                        new_lst.append(i)
                    elif i.startswith("*"): 
                        new_lst.append(i)
                    elif i.endswith("#"): 
                        new_lst.append(i)

代码检查元素是否以*#开头或结尾,如果是,则将单个元素附加到另一个列表中。

我正在解析列表并尝试捕获*#之间的元素。

我目前得到的是:

            ['*PF4', 'PF6', '#']
            ['*PF4#']
            ['*PF4', 'PF6', '#']

我想要的是:

            ['*PF4', 'PF6#']
            ['*PF4#']
            ['*PF4', 'PF6#']

2 个答案:

答案 0 :(得分:0)

这是使用枚举并加入列表的下一个元素的一种方法,如果他等于'#'到现在的那个

lst1 = ['*PF4', 'PF6', '#', 'PF2', '\PWD(5D)','PWD(30)']
lst2 = ['*PF4#', 'PF2', '\PWD(89)','PWD(31)']
lst3 = ['*PF4', 'PF6', '#', 'PF2', '\PWD(89)','PWD(31)']

def lst_pars(lst):
    new_lst = []

    for e, i in enumerate(lst):
        if i == '#':
            continue
        if e + 1 < len(lst) and lst[e + 1] == '#':
            i = i + lst[e + 1]
        if (i.startswith("*") and i.endswith("#")) or i.startswith("*") or i.endswith("#"):
            new_lst.append(i)
    return new_lst

new_lst1 = lst_pars(lst1)
new_lst2 = lst_pars(lst2)
new_lst3 = lst_pars(lst3)

输出:

['*PF4', 'PF6#']
['*PF4#']
['*PF4', 'PF6#']

答案 1 :(得分:0)

这是一种方法。使用检查标志。 checkFlag

<强>实施例

lst=[['*PF4', 'PF6', '#', 'PF2', '\PWD(5D)','PWD(30)'],
     ['*PF4#', 'PF2', '\PWD(89)','PWD(31)'],
     ['*PF4', 'PF6', '#', 'PF2', '\PWD(89)','PWD(31)']]


def getValue(lst):
    checkFlag = False
    res = []
    for i in lst:
        if checkFlag:
            if i.endswith("#"):
                res[-1] = res[-1]+i
                checkFlag = False
            else:
                res.append(i)

        if i.startswith("*") and i.endswith("#"): 
            res.append(i)
        elif i.startswith("*"):
            res.append(i)
            checkFlag = True
    return res


print(getValue(lst[0]))
print(getValue(lst[1]))
print(getValue(lst[2]))

<强>输出:

['*PF4', 'PF6#']
['*PF4#']
['*PF4', 'PF6#']