2017-03-19 19 views
0

我正在開發網站的特定功能(使用Django),我需要比較2個字符串列表。搜索2個列表中的匹配字符串根本不起作用

第一個列表包含一些必需的標識符,第二個列表包含一些其他標識符。

我必須驗證其ID從第一個列表中缺少第二個,這樣做:

def mods_checker(request): 
html = request.POST["text"] 

all_mods = Mod.objects.exclude(deprecated=True) 
soup = BeautifulSoup(html, "html.parser") 
links = soup.find_all('a', {'data-type': 'Link'}) 
ids = [] 
all_ids = [] 
missing_mods = [] 

for l in links: 
    ids.append(get_id(l.text)) 

for m in all_mods: 
    all_ids.append(m.get_id()) 

print ids 
print all_ids 

for m in all_mods: 
    if m.get_id not in ids: 
     missing_mods.append(m.name) 

return HttpResponse(json.dumps(missing_mods)) 

(對不起,壓痕,當然一切都在我的編輯OK)

我知道這段代碼是多餘的,我做了一些檢查和一些調試打印。

問題是我得到一組錯誤的ID(他們都是,更具體),我不知道爲什麼。

我在python編輯器中用測試數據做的每一個檢查都沒問題。我究竟做錯了什麼?

每張打印都很好,我正確地得到所有的ID。

+0

如果你從不使用它,爲什麼要創建變量all_ids? – Montmons

+0

我剛剛創建它來打印並檢查其內容 –

+0

啊,在這種情況下,當您發佈您的問題時,總是最好將其刪除。嘗試實現[最小化,完整且可驗證]的示例(https://stackoverflow.com/help/mcve)。 – Montmons

回答

2

不能True因爲你正在測試,如果功能是在你的列表,而不是結果(如上正確那樣)。

你有實際呼叫它爲它使用圓括號工作:

if m.get_id() not in ids: 

旁白:如果你想加快該查詢代碼,可以考慮創建一個setids

ids = {get_id(l.text) for l in links} 
+0

哇,我在那裏做了一個noob錯誤:D非常感謝!無論如何,我嘗試過,現在我必須解決另一個錯誤(這與URL解析庫有關,所以沒什麼可擔心的),但我認爲它會起作用!一旦我嘗試過,我會告訴你它是怎麼回事! –

相關問題