count_something = len([x for x in blah if x in foo])或len(set(blah)& set(foo))是否太晦涩难懂了?



我使用的列表理解可能与任何中级或高级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

最新更新