用于打印列表中偶数的 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 One Liner
示例
在下面的例子中,我们对每个数字执行按位 & 操作,并将 1 置位。它将检查最后一位是否已设置。如果未设置,则表示数字为偶数。
def evens(nums_list): print(*filter(lambda x: x % 2 == 0, nums_list)) evens([5, 20, 21, 58, 3])
输出
20 58