组合/合并lis的当前元素和上一个元素

2024-10-03 04:39:00 发布

您现在位置: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#']

Tags: 代码in元素列表newforpwdelif
2条回答

这是一种方法。使用检查标志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#']

这里有一种方法,使用enumerate并将列表的下一个元素(如果他等于“#”)连接到当前元素

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#']

相关问题 更多 >