【发布时间】:2018-05-25 16:41:23
【问题描述】:
我有 2 个正在尝试使用的列表。第一个是 nameList,它对应于我想要在其中找到匹配项的名称,第二个列表是该命名列表的状态。我希望能够查看第一个列表并在字符串中查找匹配项,如果有匹配项,则将第一个列表中的元素抓取到一个新列表中,并抓取第二个列表中的相应元素以获取名称和状态对。我已经尝试了几种方法,但未能正确解决,并查看了板上的各种列表理解问题,但无法找到适合我的情况的解决方案。
例如,在下面的代码中,我想获取 'abc-1' 和 'abc-2' 条目以及这两个条目的 'ok' 和 'ok' 状态并将它们输出为finalNameList 和 finalStatusList。
如果有人能提供任何帮助,我将不胜感激。
在我当前的实现中,我得到了一个 类型错误:'预期的字符串或缓冲区'
import re
import os
import sys
import getopt
import pdb
nameList = ['abc-1', 'abc-2', 'def-1', 'def-2']
statusList = ['ok', 'ok', 'bad', 'bad']
scac = 'abc'
def scacFilter (scac, nameList, statusList):
if not scac:
newNameList = nameList
newStatusList = statusList
else:
for i in nameList:
if re.search(scac, i):
name = nameList[i]
status = statusList[i]
newNameList.append(name)
newStatusList.append(status)
else:
print 'no scac match'
return newNameList, newStatusList
finalNameList, finalStatusList = scacFilter(scac, nameList, statusList)
【问题讨论】:
-
i是一个整数。因此,您正在整数i中搜索字符串scac。而不是for i in range(len(nameList)):只是做for i in nameList。 -
不要使用索引,使用
zip。例如,for name, status in zip(nameList, statusList): -
匹配时,
scac字符串是否始终位于nameList字符串的开头?如果是这样,不要使用正则表达式,使用name.startswith(scac)
标签: python regex list substring