首页 > 解决方案 > 将列表元素的两个不同部分存储到另一个列表中

问题描述

所以我有一个清单:

myList = ['14:14:12.294 0,Type=Xover,Count=179,mcuTs=0x000DC827,fpgaTs=0xDB3C,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535',
          '14:14:12.295 0,Type=Bndry,Count=88,mcuTs=0x000DCB00,fpgaTs=0x9DEC,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535',
          '14:14:12.295 0,Type=IsXover,Count=136,mcuTs=0x000DC822,lp-isD=1,lp-xoD=2344,alid=65535,cdr=65535,vhpn=65535,va=65535']

我正在尝试存储'alid=*****''vhpn=*****'进入另一个名为“resultList”的列表。我有找到特定字符并将其拆分到下一个逗号的代码:

for string in myList:
    mcuTimes1 = string[string.rfind('alid')+0:].split(',')[0]
    mcuTime1.append(mcuTimes1)

但问题是因为'alid=*****'并且'vhpn=*****'在列表中不是连续的(一个接一个)我无法将它们放在一起(如果我尝试将它们与我的代码放在一起,它也将包括在内'cdr=*****')。我想知道是否有人知道如何获取列表的两个不同部分?

更新
我不能使用正则表达式
我希望结果看起来像这样:

['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']

标签: pythonlist

解决方案


您可以在此处使用正则表达式:

matches = [','.join(re.findall(r'(alid=\d+|vhpn=\d+)', i)) for i in myList]

输出:

['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']

正则表达式解释:

(                                     // matching group 1
    alid=\d+                          // matches alid= followed by 1 or more digits
      |                               // OR
    vhpn=\d+                          // matches vhpn= followed by 1 or more digits
)                                     // end of matching group 1

使用正则表达式的解决方案:

matches = []

for s in myList:
  options = s.split(',')
  found = []

  for option in options:
    if option[:option.find('=')] in {'alid', 'vhpn'}:
      found.append(option)

  matches.append(','.join(found))

print(matches)

输出:

['alid=65535,vhpn=65535', 'alid=65535,vhpn=65535', 'alid=65535,vhpn=65535']

推荐阅读