如何在for循环和if语句中简化for循环?

我可以将此代码缩短为 1-2 行吗?


我已经尝试将它变成列表理解,但我不确定如果 for 循环之一使用字典键它会如何工作。


for a in dict.keys():  

    for q in list:  

        if a in q:  

            dict[a].append(q)  

这段代码可以很好地查找列表中的项目是否是字典的键之一,如果是,则将该项目存储为该字典键下的值,但我希望弄清楚是否可以进一步简化它。


湖上湖
浏览 298回答 2
2回答

繁星淼淼

最初我想提出以下建议:{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))但一个不请自来的建议。代码片段确实不需要缩短。相反,它可以用更冗长和更具描述性的变量名称来引导读者阅读并帮助理解正在发生的事情。在任何情况下,请不要使用变量名状dict或list那些已经使用内置型的构造,它真的是自讨苦吃,以重新分配给不同的对象(在大多数情况下,甚至如果仔细考虑和打算,我仍然建议不要这样做)。

万千封印

如果你愿意,你可以把它变成一个列表理解,像这样:[my_dict[a].append(q) for a in my_dict for q in my_list if a in q],但是,正如你在评论中看到的,这是不推荐的,实际上可能更难阅读和理解。循环用于迭代的内容并不重要。我花了这么长时间才明白forget 是按照它们在嵌套循环结构中的顺序编写的,而不是作为要计算的表达式反转。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python