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