我有一个清单:
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#']
答案 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#']