亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

繁花不似錦 2021-11-09 20:14:38
我在弄清楚解決這個問題的邏輯時遇到了問題。我有一個看起來像這種格式的列表:['blah', 'foo', 'bar', 'jay/day']沒有“/”的任何東西都是正常名稱。任何帶有 '/' 字符的東西都是一個名字 + 一個額外的字符串。我想要做的是遍歷一組元組并檢查元組的第一個元素是否與列表中的任何名稱匹配。但是,我也希望名稱“jay”與“jay/day”匹配,但我不希望部分匹配(即不希望“ja”部分匹配到“jay”)?;旧衔蚁胍粋€完全匹配的任何名稱,同時忽略單個條目中“/”之后的任何內容。任何幫助弄清楚這個邏輯的幫助將不勝感激。
查看完整描述

3 回答

?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

您可以將列表復制到一個新列表,而不是每次都遍歷列表并用“/”分割


input_tuples = [('jay', 'other'), ('blah', 'other stuff')]

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


# Using a set as @Patrick Haugh suggested for faster look up

new_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


查看完整回答
反對 回復 2021-11-09
?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

選擇傳統的循環方式。這將元組中的名稱與 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


查看完整回答
反對 回復 2021-11-09
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

使用正則表達式:


import re

l = ['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) # False


match('jay', l) # True


match('foo', l) # True

使用元組:


tupl = ('unknown', 'bar', 'foo', 'jay', 'anonymous', 'ja')


res = [match(x, l) for x in tupl]

資源:


[False, True, True, True, False, False]


查看完整回答
反對 回復 2021-11-09
  • 3 回答
  • 0 關注
  • 375 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號