将带筛选器的求和转换为列表理解

2024-04-25 07:46:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

Tags: 代码in目的列表forif错误counter
3条回答

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

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')

不需要构建列表;只需使用生成器表达式和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

相关问题 更多 >