执行循环的最佳方法是什么?

which is the best approach to perform for loop?

我有一个列表列表,在每个列表中,我必须检查第二个元素是否是“daemon”,所以我写了这样的代码:

### code 1
def chech_for_count(my_list: list):
    counter_of = 0
    for item in my_list:
       if item[1].lower() == "daemon":
            counter_of += 1
    return counter_of 

任务完成得很好,但我想到我也可以使用 列表理解 来完成,我认为它更像 pythonic。

### code 2
def chech_for_count(my_list: list):
    return len([item for item in my_list if item[1].lower() == "daemon"])

另外,代码做了必须成功完成的事情,我的问题是哪一个使用的内存和时间更少?

我用 time.time() 做了一个小测试,结果因一个测试而异,如下所示:

| Test number|Using list comprehension|Using normal for-loop  |
|------------|------------------------|-----------------------|
| First      | 0.2046670913696289     | 0.18691778182983398   |
| Second     | 0.11920547485351562    | 0.20410394668579102   |
| Third      | 0.09914922714233398    | 0.1051473617553711    |
| Forth      | 0.10482406616210938    | 0.1894378662109375    |
| Sum        | 0.52784585952758788    | 0.6856069564819336    |

我的问题背后的原因是因为我怀疑这些数字是否真实因为我认为一些测试速度较慢是因为 CPU 使用或与硬件相关的东西如果不是,根据这些结果我们可以说列表理解有更好的表现?

如评论中所述,您可以使用 sum():

my_list = [[1, "xxx"], [2, "deamon"], [3, "deamon"]]

print(sum(l[1] == "deamon" for l in my_list))

打印:

2

编辑:Case-insensitive 版本:

my_list = [[1, "xxx"], [2, "DEAMON"], [3, "deamon"]]

print(sum(l[1].lower() == "deamon" for l in my_list))

打印:

2