Python 在列表中搜索部分匹配项

我在弄清楚解决这个问题的逻辑时遇到了问题。我有一个看起来像这种格式的列表:

['blah', 'foo', 'bar', 'jay/day']

没有“/”的任何东西都是正常名称。任何带有 '/' 字符的东西都是一个名字 + 一个额外的字符串。我想要做的是遍历一组元组并检查元组的第一个元素是否与列表中的任何名称匹配。但是,我也希望名称“jay”与“jay/day”匹配,但我不希望部分匹配(即不希望“ja”部分匹配到“jay”)。

基本上我想要一个完全匹配的任何名称,同时忽略单个条目中“/”之后的任何内容。

任何帮助弄清楚这个逻辑的帮助将不胜感激。


繁花不似锦
浏览 333回答 3
3回答

白猪掌柜的

您可以将列表复制到一个新列表,而不是每次都遍历列表并用“/”分割input_tuples = [('jay', 'other'), ('blah', 'other stuff')]list_strings = ['blah', 'foo', 'bar', 'jay/day']# Using a set as @Patrick Haugh suggested for faster look upnew_strings = {x.split('/')[0] for x in list_strings}for tup in input_tuples:    if tup[0] in new_strings:        print('found', tup[0]) # outputs found jay, found blah

暮色呼如

选择传统的循环方式。这将元组中的名称与 lst 中的名称匹配:lst = ['blah', 'foo', 'bar', 'jay/day']tupl = ('unknown', 'bar', 'foo', 'jay', 'anonymous', 'ja', 'day')for x in tupl:    for y in lst:        if x == y.split('/')[0]:            print(x, y)# bar bar# foo foo                                                     # jay jay/day

慕娘9325324

使用正则表达式:import rel = ['blah', 'foo', 'bar', 'jay/day']def match(name, l):    for each in l:        if re.match("^{}(\/|$)".format(name), each):            return True # each if you want the string    return False结果:match('ja', l) # Falsematch('jay', l) # Truematch('foo', l) # True使用元组:tupl = ('unknown', 'bar', 'foo', 'jay', 'anonymous', 'ja')res = [match(x, l) for x in tupl]资源:[False, True, True, True, False, False]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python