簡體   English   中英

如何在for循環和if語句中簡化for循環?

[英]How to simplify a for loop in a for loop and an if statement?

我可以將此代碼縮短為 1-2 行嗎?

我已經嘗試將它變成列表理解,但我不確定如果 for 循環之一使用字典鍵它會如何工作。

for a in dict.keys():  
    for q in list:  
        if a in q:  
            dict[a].append(q)  

這段代碼可以很好地查找列表中的項目是否是字典的鍵之一,如果是,則將該項目存儲為該字典鍵下的值,但我希望弄清楚是否可以進一步簡化它。

最初我想提出以下建議:

{k: v for v in mylist for k in mydict if k in v}

但后來我注意到你實際上正在修改你的輸入,這不是正在發生的事情。 這實際上應該做同樣的事情(我對輸入做了一兩個假設):

for key in mydict.keys():
    mydict[key].extend((i for i in mylist if key in i))

但是一個不請自來的建議。 代碼片段確實不需要縮短。 相反,它可以用更冗長和更具描述性的變量名稱來引導讀者通過並幫助理解正在發生的事情。

在任何情況下,請不要使用諸如dictlist類的變量名,因為它們已經用於內置類型構造函數,並且將它們重新分配給不同的對象確實很麻煩(在大多數情況下,即使經過仔細考慮和打算,我仍然建議不要這樣做)。

如果你願意,你可以把它變成一個像這樣的列表理解: [my_dict[a].append(q) for a in my_dict for q in my_list if a in q] ,但是,正如你在評論中看到的,這個不推薦,實際上可能更難閱讀和理解。

循環用於迭代的內容並不重要。 我花了這么長時間才明白, for是按照它們在嵌套循環結構中的順序編寫的,而不是作為要計算的表達式反轉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM