将带有过滤器的求和转换为列表理解

时间:2017-05-27 15:53:08

标签: python sum list-comprehension

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

addBtnView

我尝试过使用sum()或以下代码返回false结果的一些变体:

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

3 个答案:

答案 0 :(得分:4)

你不需要建立一个清单;只需使用生成器表达式和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

答案 1 :(得分:2)

试试这个片段,希望这会有所帮助

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

答案 2 :(得分:1)

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