繁体   English   中英

使用过滤器将求和转换为列表推导

[英]Convert summation with filter to List Comprehension

我出于教育目的,尝试将以下代码转换为列表理解:

total = 0
for c in some_list:     
  if c == 'US':
     total += 1

我尝试了sum()或以下返回错误结果的代码的一些变体:

 counter = [ c for c in some_list if c=='US']

您不需要建立清单; 只需使用生成器表达式和sum()

total = sum(1 for c in some_list if c == 'US')

您不求和c ,而是求和1整数。

或者,让list对象为您进行计数:

total = some_list.count('US')

后者要快得多; 然后,循环和比较完全用C代码完成:

>>> import timeit
>>> import random
>>> some_list = [random.choice(['US', 'United Kingdom', 'The Netherlands', 'Norway']) for _ in range(1000)]
>>> timeit.timeit("sum(1 for c in some_list if c == 'US')", globals={'some_list': some_list}, number=100000)
3.54722355294507
>>> timeit.timeit("some_list.count('US')", globals={'some_list': some_list}, number=100000)
1.0752556619700044

试试这个代码片段,希望对您有所帮助

total = sum(1 for c in some_list if c == 'US')
values=['us', 'uk', 'us', 'au', 'us', 'uk', 'uk', 'us']
count = sum(1 for c in values if c=='us')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM