Python程序打印列表中的偶数
Python编程语言是最高效和最友好的编程语言之一,拥有无限的用途和应用。在Python中声明的列表类似于其他编程语言中的动态大小数组(C++中的向量和Java中的ArrayList)。列表只是一个由[]括起来并用逗号分隔的项目集合。
在本教程中,我们将学习使用Python找出给定列表中所有偶数的解决方案和方法。列表是Python中最基本的数据结构之一。它们被广泛使用,并且存储类似的连续数据。如果一个数字能被2整除,即没有余数,则认为它是偶数。
我们将介绍三种在列表中查找所有偶数的方法。
使用取模运算符
使用按位与运算符
检查数字的最后一位
使用取模运算符
取模运算符 (%) 返回第一个参数除以第二个参数的余数。
示例
6 % 4 = 2
15 % 4 = 3
27 % 6 = 3
30 % 8 = 6
对于一个偶数,它除以2的余数应该为0。
数学上,如果 x % 2 == 0,则 x 被认为是偶数。
我们可以检查列表中每个元素是否满足此条件并打印输出。
这种方法需要 **O(N)** 时间,其中 N 是范围的大小。
语法
x = 7 result = (x % 2 == 0)
示例
在下面的示例中,我们实现了上述方法。我们创建了一个函数来过滤给定列表中的所有偶数。
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num % 2 == 0: print(num, end=' ') evens([5, 20, 21, 58, 3])
输出
20 58
使用按位与运算符
在这种方法中,我们将使用按位与 (&) 运算符。计算机以二进制方式本地理解。任何整数都可以表示为位(0和1),这基本上指定了我们应该包含哪些2的幂以及哪些应该排除。
示例:1011 表示,从右到左,1*(2^0) + 1*(2^1) + 0*(2^2) + 1*(2^3) = 11
按位与运算符对每一位执行 & 运算。如果两位都设置,则此运算符返回 1,否则返回 0。示例:0110 & 1010 = 0010
除了 2^0 位或最右边的位之外,所有其他位都是 2 的幂,这意味着将它们相加将始终得到一个偶数。因此,我们可以简单地检查最后一位是否设置以确定数字是奇数还是偶数。
这种方法也需要 **O(N)** 时间,其中 N 是范围的大小。
语法
x = 7 result = (x & 1 == 0)
示例
在下面的示例中,我们对每个数字执行与 1 的按位 & 运算。它将检查最后一位是否设置。如果未设置,则表示该数字为偶数。
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num & 1 == 0: print(num, end=' ') evens([5, 20, 21, 58, 3])
输出
20 58
通过检查数字的最后一位
通过观察,我们可以确定如果一个数字是偶数,它必须以 0、2、4、6 或 8 结尾。这可以与模 10 一起使用,因为模 10 给出数字的最后一位。
这种方法需要 O(N * 5) 时间,因为每个元素都会检查是否在一个大小为 5 的元组中。
示例
12345 % 10 = 5 (奇数)
4232 % 10 = 2 (偶数)
语法
x = 7 result = x % 10 in (0, 2, 4, 6, 8)
示例
我们在这里使用 'in' 关键字在元组中快速查找。集合也可以使用,它提供恒定的查找时间。
def evens(nums_list): # iteration for num in nums_list: # check for remainder if num % 10 in (0, 2, 4, 6, 8): print(num, end=' ') evens([5, 20, 21, 58, 3])
输出
20 58
Python 小技巧
Python 包含一个名为 filter() 的内置函数,它返回一个迭代器。
它接受两个参数,第一个是布尔函数,第二个是应该在其上应用它的可迭代对象。我们可以将上述任何方法用作此函数。
这种方法也需要 **O(N)** 时间,其中 N 是范围的大小。
使用 filter() 时必须特别注意,因为它是可以穷举的,这意味着一旦它用于遍历或转换为列表,如果再次遍历,它将返回 None,因此最好将其转换为列表并存储在另一个变量中。
语法
evens = filter(lambda x: x % 2 == 0, [5, 20, 21, 58, 3])
示例
在下面的示例中,我们对每个数字执行与 1 的按位 & 运算。它将检查最后一位是否设置。如果未设置,则表示该数字为偶数。
def evens(nums_list): even_numbers = filter(lambda x: x % 2 == 0, nums_list) for num in even_numbers: print(num, end=' ') evens([5, 20, 21, 58, 3]
使用 filter() 的 Python 单行代码
示例
在下面的示例中,我们对每个数字执行与 1 的按位 & 运算。它将检查最后一位是否设置。如果未设置,则表示该数字为偶数。
def evens(nums_list): print(*filter(lambda x: x % 2 == 0, nums_list)) evens([5, 20, 21, 58, 3])
输出
20 58