Python 打印列表中的偶数
Python编程语言是最高效和用户友好的编程语言之一,并且有无尽的用途和应用。Python中声明的列表类似于其他编程语言中的动态大小数组(如C++中的vector和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的幂次和应该排除哪个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使用,因为mod 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是range的大小。
在使用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一行代码
示例
在下面的示例中,我们对每个数字执行按位与(&
)运算,它将检查最后一位是否被设置。如果未设置,表示该数字是偶数。
def evens(nums_list):
print(*filter(lambda x: x % 2 == 0, nums_list))
evens([5, 20, 21, 58, 3])
输出
20 58