你必須掌握的 30 個(gè) Python 代碼,短小精悍,用處無窮
1. 字符串的翻轉(zhuǎn)
字符串的翻轉(zhuǎn),首先最簡單的方法就是利用切片的操作,來實(shí)現(xiàn)翻轉(zhuǎn),其次可以利用 reduce 函數(shù)來實(shí)現(xiàn)翻轉(zhuǎn),在 Python 3 中,reduce 函數(shù)需要從 functools 中進(jìn)行導(dǎo)入。
示例:
# 使用切片翻轉(zhuǎn)字符串
original_str = "hello"
reversed_str = original_str[::-1]
print("翻轉(zhuǎn)后的字符串:", reversed_str) # 輸出 翻轉(zhuǎn)后的字符串: olleh
# 使用 reduce 函數(shù)翻轉(zhuǎn)字符串
from functools import reduce
reversed_str = reduce(lambda x, y: y + x, original_str)
print("翻轉(zhuǎn)后的字符串:", reversed_str) # 輸出 翻轉(zhuǎn)后的字符串: olleh
解釋:
切片操作 [::-1] 可以快速翻轉(zhuǎn)字符串。
reduce 函數(shù)通過累積操作將字符串翻轉(zhuǎn)。
2. 判斷字符串是否是回文
該例也可以看作是第一例的應(yīng)用,利用字符串的翻轉(zhuǎn)來判斷字符是否是回文字符串。
示例:
def is_palindrome(s):
return s == s[::-1]
test_str = "madam"
if is_palindrome(test_str):
print(f"{test_str} 是回文字符串。") # 輸出 madam 是回文字符串。
else:
print(f"{test_str} 不是回文字符串。")
解釋:
回文字符串是指正讀和反讀都一樣的字符串。
使用切片操作 [::-1] 翻轉(zhuǎn)字符串并進(jìn)行比較。
3. 單詞大小寫
面對(duì)一個(gè)字符串,想將里面的單詞首字母大寫,只需要調(diào)用 title() 函數(shù),而所有的字母大寫只需要調(diào)用 upper() 函數(shù),字符串首字母大寫則是調(diào)用 capitalize() 函數(shù)即可。
示例:
original_str = "hello world"
# 首字母大寫
capitalized_str = original_str.capitalize()
print("首字母大寫:", capitalized_str) # 輸出 首字母大寫: Hello world
# 所有單詞首字母大寫
title_str = original_str.title()
print("所有單詞首字母大寫:", title_str) # 輸出 所有單詞首字母大寫: Hello World
# 所有字母大寫
upper_str = original_str.upper()
print("所有字母大寫:", upper_str) # 輸出 所有字母大寫: HELLO WORLD
解釋:
capitalize() 方法將字符串的首字母大寫。
title() 方法將字符串中每個(gè)單詞的首字母大寫。
upper() 方法將字符串中的所有字母大寫。
4. 字符串的拆分
字符串的拆分可以直接利用 split 函數(shù),進(jìn)行實(shí)現(xiàn),返回的是列表,而 strip 函數(shù)用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)。
示例:
# 拆分字符串
sentence = "hello world this is python"
words = sentence.split()
print("拆分后的單詞:", words) # 輸出 拆分后的單詞: ['hello', 'world', 'this', 'is', 'python']
# 移除字符串頭尾的空格
trimmed_str = " hello world ".strip()
print("移除空格后的字符串:", trimmed_str) # 輸出 移除空格后的字符串: hello world
解釋:
split() 方法將字符串按空格拆分為單詞列表。
strip() 方法移除字符串頭尾的空格。
5. 將列表中的字符串合并
這一條可以認(rèn)為是第 4 條的反例,這里是將列表中的字符串合并為字符串。第 4 條可以與第 5 條結(jié)合,來去除字符串中不想留下的項(xiàng)。
示例:
# 合并列表中的字符串
words = ["hello", "world", "this", "is", "python"]
sentence = " ".join(words)
print("合并后的字符串:", sentence) # 輸出 合并后的字符串: hello world this is python
解釋:
join() 方法將列表中的字符串用指定的分隔符連接成一個(gè)字符串。
6. 尋找字符串中唯一的元素
在 Python 中,對(duì)于唯一值的篩查,首先應(yīng)該想到對(duì)于 set 的利用,set 可以幫助我們快速的篩查重復(fù)的元素,上述程序中,set 不僅可以對(duì)字符串,而且還可以針對(duì)列表進(jìn)行篩查。
示例:
# 尋找字符串中的唯一元素
original_str = "hello"
unique_chars = set(original_str)
print("唯一字符:", unique_chars) # 輸出 唯一字符: {'l', 'o', 'h', 'e'}
# 尋找列表中的唯一元素
original_list = [1, 2, 2, 3, 4, 4, 5]
unique_items = set(original_list)
print("唯一元素:", unique_items) # 輸出 唯一元素: {1, 2, 3, 4, 5}
解釋:
set 是一種無序不重復(fù)的集合,可以快速去重。
7. 將元素進(jìn)行重復(fù)
將元素進(jìn)行重復(fù),可以采用“乘法”的形式,直接乘以原來的元素,也可以采用“加法”的形式,更方便理解。
示例:
# 使用乘法重復(fù)元素
repeated_list = [1, 2] * 3
print("重復(fù)后的列表:", repeated_list) # 輸出 重復(fù)后的列表: [1, 2, 1, 2, 1, 2]
# 使用加法重復(fù)元素
repeated_list = [1, 2] + [1, 2] + [1, 2]
print("重復(fù)后的列表:", repeated_list) # 輸出 重復(fù)后的列表: [1, 2, 1, 2, 1, 2]
解釋:
列表的乘法操作可以重復(fù)列表中的元素。
列表的加法操作可以將多個(gè)列表合并。
8. 基于列表的擴(kuò)展
基于列表的擴(kuò)展,可以充分利用列表的特性和 Python 語法的簡潔性,來產(chǎn)生新的列表,或者將嵌套的列表進(jìn)行展開。
示例:
# 生成新的列表
squares = [x ** 2 for x in range(5)]
print("平方數(shù):", squares) # 輸出 平方數(shù): [0, 1, 4, 9, 16]
# 展開嵌套的列表
nested_list = [[1, 2], [3, 4], [5, 6]]
flattened_list = [item for sublist in nested_list for item in sublist]
print("展開后的列表:", flattened_list) # 輸出 展開后的列表: [1, 2, 3, 4, 5, 6]
解釋:
列表推導(dǎo)式可以生成新的列表。
嵌套的列表推導(dǎo)式可以將嵌套的列表展開。
9. 將列表展開
首先,方法 1 中,我們調(diào)用的是 iteration_utilities 中的 deepflatten 函數(shù),第二種方法直接采用遞歸的方法,我們自己來實(shí)現(xiàn)復(fù)雜列表的展平,便可以得到展開后的列表。
示例:
# 使用 deepflatten 函數(shù)
from iteration_utilities import deepflatten
nested_list = [1, [2, [3, 4], 5], 6]
flattened_list = list(deepflatten(nested_list))
print("展開后的列表:", flattened_list) # 輸出 展開后的列表: [1, 2, 3, 4, 5, 6]
# 使用遞歸方法
def flatten(lst):
result = []
for item in lst:
if isinstance(item, list):
result.extend(flatten(item))
else:
result.append(item)
return result
nested_list = [1, [2, [3, 4], 5], 6]
flattened_list = flatten(nested_list)
print("展開后的列表:", flattened_list) # 輸出 展開后的列表: [1, 2, 3, 4, 5, 6]
解釋:
deepflatten 函數(shù)可以遞歸地展平嵌套列表。
遞歸方法通過逐層展開嵌套列表來實(shí)現(xiàn)展平。
10. 二值交換
Python 中的二值交換,可以直接采用交換的方式,如上圖的方法 1,而方法 2 所示的方法,借助第三個(gè)變量,來實(shí)現(xiàn)了兩個(gè)數(shù)值的交換。
示例:
# 直接交換
a, b = 5, 10
a, b = b, a
print("交換后的值: a =", a, "b =", b) # 輸出 交換后的值: a = 10 b = 5
# 使用第三個(gè)變量交換
a, b = 5, 10
temp = a
a = b
b = temp
print("交換后的值: a =", a, "b =", b) # 輸出 交換后的值: a = 10 b = 5
解釋:
直接交換使用多重賦值來交換兩個(gè)變量的值。
使用第三個(gè)變量交換通過臨時(shí)變量來交換兩個(gè)變量的值。
11. 統(tǒng)計(jì)列表中元素的頻率
我們可以直接調(diào)用 collections 中的 Counter 類來統(tǒng)計(jì)元素的數(shù)量,當(dāng)然也可以自己來實(shí)現(xiàn)這樣的統(tǒng)計(jì),但是從簡潔性來講,還是以 Counter 的使用比較方便。
示例:
from collections import Counter
# 使用 Counter 統(tǒng)計(jì)頻率
items = [1, 2, 2, 3, 4, 4, 4]
counter = Counter(items)
print("元素頻率:", counter) # 輸出 元素頻率: Counter({4: 3, 2: 2, 1: 1, 3: 1})
# 自己實(shí)現(xiàn)統(tǒng)計(jì)頻率
frequency = {}
for item in items:
if item in frequency:
frequency[item] += 1
else:
frequency[item] = 1
print("元素頻率:", frequency) # 輸出 元素頻率: {1: 1, 2: 2, 3: 1, 4: 3}
解釋:
Counter 類可以快速統(tǒng)計(jì)列表中元素的頻率。
自己實(shí)現(xiàn)統(tǒng)計(jì)頻率通過字典來記錄每個(gè)元素出現(xiàn)的次數(shù)。
12. 判斷字符串所含元素是否相同
Counter 函數(shù)還可以用來判斷字符串中包含的元素是否相同,無論字符串中元素順序如何,只要包含相同的元素和數(shù)量,就認(rèn)為其是相同的。
示例:
from collections import Counter
# 判斷字符串是否包含相同的元素
str1 = "abc"
str2 = "cba"
str3 = "abcd"
if Counter(str1) == Counter(str2):
print(f"{str1} 和 {str2} 包含相同的元素。") # 輸出 abc 和 cba 包含相同的元素。
else:
print(f"{str1} 和 {str2} 不包含相同的元素。")
if Counter(str1) == Counter(str3):
print(f"{str1} 和 {str3} 包含相同的元素。")
else:
print(f"{str1} 和 {str3} 不包含相同的元素。") # 輸出 abc 和 abcd 不包含相同的元素。
解釋:
Counter 對(duì)象可以比較兩個(gè)字符串中元素的頻率,從而判斷它們是否包含相同的元素。
13. 將數(shù)字字符串轉(zhuǎn)化為數(shù)字列表
上述程序中,方法 1 利用的 map 函數(shù),map 函數(shù)可以將 str19 中的每個(gè)元素都執(zhí)行 int 函數(shù),其返回的是一個(gè)迭代器,利用 list 函數(shù)來將其轉(zhuǎn)化為列表的形式。注意,在 Python 2 中執(zhí)行 map 函數(shù)就會(huì)直接返回列表,而 Python 3 做了優(yōu)化,返回的是迭代器,節(jié)省了內(nèi)存。
示例:
# 使用 map 函數(shù)
str19 = "1 2 3 4 5"
num_list = list(map(int, str19.split()))
print("數(shù)字列表:", num_list) # 輸出 數(shù)字列表: [1, 2, 3, 4, 5]
# 使用列表推導(dǎo)式
num_list = [int(num) for num in str19.split()]
print("數(shù)字列表:", num_list) # 輸出 數(shù)字列表: [1, 2, 3, 4, 5]
解釋:
map 函數(shù)將字符串中的每個(gè)元素轉(zhuǎn)換為整數(shù)。
列表推導(dǎo)式也可以實(shí)現(xiàn)相同的功能,更加簡潔。
14. 使用 try-except-finally 模塊
當(dāng)我們?cè)趫?zhí)行程序時(shí),可能會(huì)遇到某些不可預(yù)知的錯(cuò)誤,使用 try-except 可以幫助我們?nèi)ゲ东@這些錯(cuò)誤,然后輸出提示。注意,如果需要程序無論是否出錯(cuò),都要執(zhí)行一些程序的話,需要利用 finally 來實(shí)現(xiàn)。
示例:
# 使用 try-except-finally
try:
num = int(input("請(qǐng)輸入一個(gè)數(shù)字: "))
result = 10 / num
print("結(jié)果:", result)
except ZeroDivisionError:
print("不能除以零。")
except ValueError:
print("無效輸入。")
finally:
print("程序結(jié)束。")
解釋:
try 塊用于嘗試可能引發(fā)異常的代碼。
except 塊用于捕獲并處理異常。
finally 塊無論是否有異常都會(huì)執(zhí)行。
15. 使用 enumerate() 函數(shù)來獲取索引-數(shù)值對(duì)
enumerate() 函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如上圖的列表,字符串)組合為一個(gè)索引序列。
示例:
# 使用 enumerate 函數(shù)
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"索引: {index}, 水果: {fruit}")
# 輸出
# 索引: 0, 水果: apple
# 索引: 1, 水果: banana
# 索引: 2, 水果: cherry
解釋:
enumerate 函數(shù)返回一個(gè)包含索引和值的枚舉對(duì)象。
16. 代碼執(zhí)行消耗時(shí)間
利用 time 函數(shù),在核心程序開始前記住當(dāng)前時(shí)間點(diǎn),然后在程序結(jié)束后計(jì)算當(dāng)前時(shí)間點(diǎn)和核心程序開始前的時(shí)間差,可以幫助我們計(jì)算程序執(zhí)行所消耗的時(shí)間。
示例:
import time
# 計(jì)算代碼執(zhí)行時(shí)間
start_time = time.time()
# 核心代碼
time.sleep(2)
end_time = time.time()
execution_time = end_time - start_time
print("代碼執(zhí)行時(shí)間:", execution_time, "秒") # 輸出 代碼執(zhí)行時(shí)間: 2.00012345 秒
解釋:
time.time() 返回當(dāng)前時(shí)間戳。
通過計(jì)算開始時(shí)間和結(jié)束時(shí)間的差值來獲取代碼執(zhí)行時(shí)間。
17. 檢查對(duì)象的內(nèi)存占用情況
在 Python 中可以使用 sys.getsizeof 來查看元素所占內(nèi)存的大小。
示例:
import sys
# 檢查對(duì)象的內(nèi)存占用
num = 10
str1 = "hello"
list1 = [1, 2, 3]
print("數(shù)字占用內(nèi)存:", sys.getsizeof(num), "字節(jié)") # 輸出 數(shù)字占用內(nèi)存: 28 字節(jié)
print("字符串占用內(nèi)存:", sys.getsizeof(str1), "字節(jié)") # 輸出 字符串占用內(nèi)存: 54 字節(jié)
print("列表占用內(nèi)存:", sys.getsizeof(list1), "字節(jié)") # 輸出 列表占用內(nèi)存: 88 字節(jié)
解釋:
sys.getsizeof 函數(shù)返回對(duì)象在內(nèi)存中占用的字節(jié)數(shù)。
18. 字典的合并
在 Python 3 中,提供了新的合并字典的方式,如方法 1 所示,此外 Python 3 還保留了 Python 2 的合并字典的方式,如方法 2 所示。
示例:
# 使用新的合并方式
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
merged_dict = {**dict1, **dict2}
print("合并后的字典:", merged_dict) # 輸出 合并后的字典: {'a': 1, 'b': 3, 'c': 4}
# 使用 update 方法
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
dict1.update(dict2)
print("合并后的字典:", dict1) # 輸出 合并后的字典: {'a': 1, 'b': 3, 'c': 4}
解釋:
使用解包操作 {**dict1, **dict2} 可以合并兩個(gè)字典。
update 方法在原字典上添加另一個(gè)字典的鍵值對(duì)。
19. 隨機(jī)采樣
使用 random.sample 函數(shù),可以從一個(gè)序列中選擇 n_samples 個(gè)隨機(jī)且獨(dú)立的元素。
示例:
import random
# 隨機(jī)采樣
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sampled_items = random.sample(items, 5)
print("隨機(jī)采樣的元素:", sampled_items) # 輸出 隨機(jī)采樣的元素: [2, 5, 3, 7, 9]
解釋:
random.sample 函數(shù)從列表中隨機(jī)選擇指定數(shù)量的元素。
20. 檢查唯一性
通過檢查列表長度是否與 set 后的列表長度一致,來判斷列表中的元素是否是獨(dú)一無二的。
示例:
# 檢查列表中的元素是否唯一
items = [1, 2, 3, 4, 5]
if len(items) == len(set(items)):
print("列表中的元素是唯一的。") # 輸出 列表中的元素是唯一的。
else:
print("列表中的元素不是唯一的。")
items = [1, 2, 2, 3, 4, 5]
if len(items) == len(set(items)):
print("列表中的元素是唯一的。")
else:
print("列表中的元素不是唯一的。") # 輸出 列表中的元素不是唯一的。
解釋:
set 去重后,如果長度與原列表長度相同,則說明列表中的元素是唯一的。
21. 生成斐波那契數(shù)列
生成斐波那契數(shù)列是一個(gè)經(jīng)典的編程問題,可以使用生成器來實(shí)現(xiàn)。
示例:
# 生成斐波那契數(shù)列
def fibonacci(n):
a, b = 0, 1
while a < n:
yield a
a, b = b, a + b
# 使用生成器
for num in fibonacci(10):
print(num)
# 輸出
# 0
# 1
# 1
# 2
# 3
# 5
# 8
解釋:
使用 yield 關(guān)鍵字定義生成器函數(shù)。
生成器函數(shù)每次調(diào)用時(shí)返回一個(gè)值,并保留狀態(tài)。
22. 計(jì)算列表的平均值
計(jì)算列表中所有元素的平均值是一個(gè)常見的需求,可以使用簡單的數(shù)學(xué)運(yùn)算來實(shí)現(xiàn)。
示例:
# 計(jì)算列表的平均值
numbers = [1, 2, 3, 4, 5]
average = sum(numbers) / len(numbers)
print("平均值:", average) # 輸出 平均值: 3.0
解釋:
sum() 函數(shù)計(jì)算列表中所有元素的總和。
len() 函數(shù)返回列表的長度。
平均值通過總和除以長度來計(jì)算。
23. 判斷一個(gè)數(shù)是否為質(zhì)數(shù)
判斷一個(gè)數(shù)是否為質(zhì)數(shù)是另一個(gè)經(jīng)典的編程問題,可以通過檢查該數(shù)是否能被小于其平方根的任何數(shù)整除來實(shí)現(xiàn)。
示例:
# 判斷一個(gè)數(shù)是否為質(zhì)數(shù)
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 測試
num = 17
if is_prime(num):
print(f"{num} 是質(zhì)數(shù)。") # 輸出 17 是質(zhì)數(shù)。
else:
print(f"{num} 不是質(zhì)數(shù)。")
解釋:
質(zhì)數(shù)是大于 1 且只能被 1 和自身整除的自然數(shù)。
通過檢查小于等于其平方根的所有數(shù)來判斷是否為質(zhì)數(shù)。
24. 計(jì)算字符串中每個(gè)字符的出現(xiàn)次數(shù)
計(jì)算字符串中每個(gè)字符的出現(xiàn)次數(shù)可以使用 collections.Counter 類來實(shí)現(xiàn)。
示例:
from collections import Counter
# 計(jì)算字符串中每個(gè)字符的出現(xiàn)次數(shù)
text = "hello world"
char_count = Counter(text)
print("字符出現(xiàn)次數(shù):", char_count) # 輸出 字符出現(xiàn)次數(shù): Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
解釋:
Counter 類可以快速統(tǒng)計(jì)字符串中每個(gè)字符的出現(xiàn)次數(shù)。
25. 檢查兩個(gè)列表是否有共同元素
檢查兩個(gè)列表是否有共同元素可以通過集合的交集操作來實(shí)現(xiàn)。
示例:
# 檢查兩個(gè)列表是否有共同元素
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common_elements = set(list1) & set(list2)
if common_elements:
print("兩個(gè)列表有共同元素:", common_elements) # 輸出 兩個(gè)列表有共同元素: {4, 5}
else:
print("兩個(gè)列表沒有共同元素。")
解釋:
將列表轉(zhuǎn)換為集合,然后使用交集操作 & 來檢查共同元素。
26. 將字典按值排序
將字典按值排序可以使用 sorted 函數(shù)和 lambda 表達(dá)式來實(shí)現(xiàn)。
示例:
# 將字典按值排序
scores = {"Alice": 95, "Bob": 85, "Charlie": 90}
sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True)
print("按值排序后的字典:", sorted_scores) # 輸出 按值排序后的字典: [('Alice', 95), ('Charlie', 90), ('Bob', 85)]
解釋:
sorted 函數(shù)可以對(duì)字典的項(xiàng)進(jìn)行排序。
key=lambda x: x[1] 指定按值排序。
reverse=True 指定降序排序。
27. 從字典中刪除指定的鍵
從字典中刪除指定的鍵可以使用 pop 方法或 del 語句來實(shí)現(xiàn)。
示例:
# 從字典中刪除指定的鍵
scores = {"Alice": 95, "Bob": 85, "Charlie": 90}
# 使用 pop 方法
removed_value = scores.pop("Bob")
print("刪除后的字典:", scores) # 輸出 刪除后的字典: {'Alice': 95, 'Charlie': 90}
print("刪除的值:", removed_value) # 輸出 刪除的值: 85
# 使用 del 語句
del scores["Charlie"]
print("刪除后的字典:", scores) # 輸出 刪除后的字典: {'Alice': 95}
解釋:
pop 方法刪除指定鍵并返回對(duì)應(yīng)的值。
del 語句刪除指定鍵。
28. 檢查文件是否存在
檢查文件是否存在可以使用 os.path.exists 函數(shù)來實(shí)現(xiàn)。
示例:
import os
# 檢查文件是否存在
file_path = "example.txt"
if os.path.exists(file_path):
print("文件存在。")
else:
print("文件不存在。")
解釋:
os.path.exists 函數(shù)檢查指定路徑的文件是否存在。
29. 讀取文件的每一行
讀取文件的每一行可以使用 with 語句和 for 循環(huán)來實(shí)現(xiàn)。
示例:
# 讀取文件的每一行
file_path = "example.txt"
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
print("行內(nèi)容:", line.strip()) # 輸出 行內(nèi)容: 你好,世界!
解釋:
with 語句確保文件在操作完成后自動(dòng)關(guān)閉。
for 循環(huán)逐行讀取文件內(nèi)容。
30. 將列表中的元素轉(zhuǎn)換為字符串
將列表中的元素轉(zhuǎn)換為字符串可以使用 map 函數(shù)和 join 方法來實(shí)現(xiàn)。
示例:
# 將列表中的元素轉(zhuǎn)換為字符串
numbers = [1, 2, 3, 4, 5]
str_numbers = ", ".join(map(str, numbers))
print("轉(zhuǎn)換后的字符串:", str_numbers) # 輸出 轉(zhuǎn)換后的字符串: 1, 2, 3, 4, 5
解釋:
map 函數(shù)將列表中的每個(gè)元素轉(zhuǎn)換為字符串。
join 方法將列表中的字符串用逗號(hào)和空格連接成一個(gè)字符串。
總結(jié)
以上是 Python 語言的核心語法細(xì)節(jié),涵蓋了從基本的字符串操作、列表和字典操作、異常處理、時(shí)間計(jì)算、內(nèi)存占用檢查、生成器、質(zhì)數(shù)判斷、字符計(jì)數(shù)、列表交集、字典排序、文件操作等方面。熟悉這些語法細(xì)節(jié)可以大大提高你在編程中的效率和代碼的可讀性。