我使用的列表理解可能与任何中级或高级Python程序员一样多。我尽量不使用过度使用。
我很好奇这是看起来晦涩还是简洁:
some_count = len([x for x in some_list if x in some_dict])
代替:
some_count = 0
for x in some_list:
if x in some_dict:
some_count += 1
在我正在考虑的实际情况下,我甚至可以使用:
some_count = len(set(some_list) & set(some_dict))
(假设some_list中的项保证是不同的)。
特别是,我有一个函数,它返回一个(可能是空的)字符串列表(来自外部专有数据存储)。在我的代码中,应该只有其中一个是字典的有效键。如果它是零,我应该发布一个警告,如果它是一,我应该只显示代码中的值,如果它不止一个,我应该发出一个错误。
我只是在征求文体方面的意见。
条件x in some_dict(x)
非常模糊;看起来你需要失去(x)
。
你不需要建立一个列表;试试这个:
some_count = sum(1 for x in some_list if x in whatever)
你的既定方法似乎是最容易理解的。然而,它不太可能是最快的。
如果你真的只想测试dict中列表中是否有零个、一个或多个元素,你不必遍历整个列表。如果列表很大,并且有很多(或一些早期)点击,这可能会节省一些时间。
>>> def f(lst, dic):
... it = iter(lst)
... if any(x in dic for x in it):
... if any(x in dic for x in it):
... print("twice or more")
... else:
... print("exactly once")
... else:
... print("not at all")
...
>>> f([1, 2, 3], {0:0})
not at all
>>> f([1, 2, 3], {0:0, 1:1})
exactly once
>>> f([1, 2, 3], {0:0, 1:1, 2:2, 3:3})
twice or more