Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 列表中的迭代和匹配项_String_List_Python 3.x_Iteration - Fatal编程技术网

String 列表中的迭代和匹配项

String 列表中的迭代和匹配项,string,list,python-3.x,iteration,String,List,Python 3.x,Iteration,我试图检查一个列表的元素是否与另一个列表的元素匹配。但问题有一个小小的转折 alist = ['949', '714'] blist = ['(714)824-1234', '(419)312-8732', '(949)555-1234', '(661)949-2867'] 我试图将alist的元素与blist匹配,但仅匹配区号部分(在blist中)。这是我目前的代码: def match_area_codes(alist, blist): clist =[] for i in alist:

我试图检查一个列表的元素是否与另一个列表的元素匹配。但问题有一个小小的转折

alist = ['949', '714']
blist = ['(714)824-1234', '(419)312-8732', '(949)555-1234', '(661)949-2867']
我试图将alist的元素与blist匹配,但仅匹配区号部分(在blist中)。这是我目前的代码:

def match_area_codes(alist, blist):
clist =[]
for i in alist:
    for j in blist:
        if i in j:
            clist.append(j)
return clist
除了列表中其他任何地方有与区号匹配的字符串外,该代码在大多数情况下都有效。它只能打印:

['(714)824-1234', '(949)555-1234']
但它最终会打印出来

['(714)824-1234', '(949)555-1234', '(661)949-2867']
因为最后一个电话号码中有一个'949'。有办法解决这个问题吗?

您可以使用获取
(…)
中的零件,并将该零件与
列表进行比较

import re
def match_area_codes(alist, blist):
    p = re.compile(r"\((\d+)\)")
    return [b for b in blist if p.search(b).group(1) in alist]
例如:

>>> alist = set(['949', '714'])
>>> blist = ['(714)824-1234', '(419)312-8732', '(949)555-1234', '(661)949-2867']
>>> match_area_codes(alist, blist)
['(714)824-1234', '(949)555-1234']

如果您真的想在没有正则表达式的情况下执行此操作,例如,您可以找到
的位置,从而从对应于区域代码的字符串中获取切片

def match_area_codes(alist, blist):
    find_code = lambda s: s[s.index("(") + 1 : s.index(")")]
    return [b for b in blist if find_code(b) in alist]

然而,我强烈建议将此作为开始使用正则表达式的一个机会。这并不难,而且绝对值得

使用
re.compile
比将其放入列表理解中更好!并在每次迭代中编译正则表达式@Kasra是的,这就是为什么我使用
re.compile
而不是把它放在列表中。。。或者你是什么意思?@tobias_k.。就这样。。还有别的办法吗?我还没看过正则表达式。@LeonSurrao你是说正则表达式的替代品?当然有,但是你应该抓住这个机会来学习正则表达式。这是值得的@tobias_k..我的意思是只使用for和if语句、split或join。