将列表元素的两个不同部分存储到另一个列表中

时间:2018-05-04 14:08:00

标签: python list

所以我有一个清单:

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

1 个答案:

答案 0 :(得分:4)

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

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