📌  相关文章
📜  Python|匹配特定条件的元素计数

📅  最后修改于: 2022-05-13 01:55:05.109000             🧑  作者: Mango

Python|匹配特定条件的元素计数

通过条件检查数字/元素是一个常见的问题,几乎在每个程序中都会遇到。有时我们还需要获取与特定条件匹配的总数,以区分哪些不匹配以供进一步使用。让我们讨论可以实现此任务的某些方法。

方法 #1:使用sum() + 生成器表达式
此方法使用每当生成器表达式返回 true 时将总和加 1 的技巧。当列表耗尽时,返回匹配条件的数字计数的总和。

# Python 3 code to demonstrate 
# to get count of elements matching condition 
# using sum() + generator expression
  
# initializing list
test_list = [3, 5, 1, 6, 7, 9]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# using sum() + generator expression
# to get count of elements matching condition 
# checks for odd
res = sum(1 for i in test_list if i % 2 != 0)
  
# printing result
print ("The number of odd elements: " + str(res))

输出 :

The original list is : [3, 5, 1, 6, 7, 9]
The number of odd elements: 5

方法#2:使用sum() + map()
map()
完成的任务几乎与生成器表达式相似,不同之处只是它采用的内部数据结构不同,因此效率更高。

# Python 3 code to demonstrate 
# to get count of elements matching condition 
# using sum()+ map()
  
# initializing list
test_list = [3, 5, 1, 6, 7, 9]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# using sum()+ map()
# to get count of elements matching condition 
# checks for odd
res = sum(map(lambda i: i % 2 != 0, test_list))
  
# printing result
print ("The number of odd elements: " + str(res))

输出 :

The original list is : [3, 5, 1, 6, 7, 9]
The number of odd elements: 5

方法 #3:使用reduce() + lamda
在上述使用的方法中,reduce函数作为 sum函数执行累加任务。 lambda 用于执行需要检查结果的条件。

# Python 3 code to demonstrate 
# to get count of elements matching condition 
# using reduce() + lambda
  
# initializing list
test_list = [3, 5, 1, 6, 7, 9]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# using reduce() + lambda
# to get count of elements matching condition 
# checks for odd
res = reduce(lambda count, i: count + (i % 2 != 0), test_list, 0)
  
# printing result
print ("The number of odd elements: " + str(res))

输出 :

The original list is : [3, 5, 1, 6, 7, 9]
The number of odd elements: 5