10個小技巧改進的 Python 代碼,讓你的代碼更加簡潔、更加 Python 化,
1. 用enumerate代替range
如果你需要遍歷一個串列,并且需要同時獲取索引和元素,大多數情況可能會使用 range(len(data)) 的語法,
比如我們要遍歷一個串列,找到所有的負數:
很多人學習蟒蛇,不知道從何學起, 很多人學習python,掌握了基本語法之后,不知道在哪里尋找案例上手, 很多已經可能案例的人,卻不知道如何去學習更多高深的知識, 那么針對這三類人,我給大家提供一個好的學習平臺,免費獲取視頻教程,電子書,以及課程的源代碼! QQ群:101677771 歡迎加入,一起討論一起學習
data = [1, 3, -5, 7, 9, -11]
for i in range(len(data)):
if data[i] < 0:
print(f"索引:{
i},元素:{
data[i]}")
輸出:
索引:2,元素:-5
索引:5,元素:-11
雖然這種方法有效,但如果使用 Python 內置的 enumerate 函式會更好,這個函式會回傳遍歷程序中當前索引和當前元素值作為一個元組,因此可以直接輸出索引和值:
data = [1, 3, -5, 7, 9, -11]
for i, v, in enumerate(data):
if v < 0:
print(f"索引:{
i},元素:{
v}")
輸出:
索引:2,元素:-5
索引:5,元素:-11
2. 深入理解list,替代for回圈
假如我們要創建一個從0~9的平方數的串列,一種簡單的方法是先創建一個 list ,然后通過 for 回圈每次將一個數的平方 append 到串列的結尾,
squares = []
for i in range(10):
squares.append(i ** 2)
print(squares)
輸出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
但其實通過串列生成式,我們有一種更快捷的方法,只需要一行代碼就能夠實作相同的功能,
squares = [i ** 2 for i in range(10)]
print(squares)
輸出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3. 通過 Python 內置的sorted()方法對復雜的物件進行排序
排序的需求在很多場景中都很常見,Python中的可迭代物件(串列、元組、字典)都可以進行排序,內置函式 sorted() 讓我們甚至都不需要自己實作排序演算法,
data = [1, 3, -5, 7, 9, -11]
sortedData = sorted(data)
print(sortedData)
輸出:
[-11, -5, 1, 3, 7, 9]
sorted() 方法自動將串列按照升序排序,如果你想按照降序排序,可以使用 sorted() 的引數 reverse = True ,
sorted() 方法同樣也適用于元組型別的資料,但是注意排序的結果將回傳一個串列,
data = (1, 3, -5, 7, 9, -11)
print(data)
sortedData = sorted(data)
print(sortedData)
輸出:
(1, 3, -5, 7, 9, -11)
[-11, -5, 1, 3, 7, 9]
對于復雜的可迭代物件,比如我們可以創建一個串列,串列中的每一個元素都是一個人的字典資訊,然后我們按照每個人的年齡進行排序,
我們可以用 sorted() 的 key 引數,傳入一個匿名函式,讓排序按照我們預想的方式進行,
data = https://www.cnblogs.com/sn520/archive/2022/01/04/[{
"name": "Alex", "age": 18},
{
"name": "Band", "age": 21},
{
"name": "Coco", "age": 17}]
sorted_data = https://www.cnblogs.com/sn520/archive/2022/01/04/sorted(data, key=lambda x: x["age"])
print(sorted_data)
輸出:
[{'name': 'Coco', 'age': 17}, {'name': 'Alex', 'age': 18}, {'name': 'Band', 'age': 21}]
4. 使用集合Set存盤唯一值
如果你有一個包含多個值的串列,并且需要去重,一個不錯的技巧是將我們的串列轉換為一個集合,
Python的集合是一種無序的資料型別,并且沒有重復元素,還提供了不同集合之間的運算,可以求交集、并集和差集,
data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
setData = set(data)
print(setData)
輸出:
{1, 3, 5, 7, 9}
5. 使用生成器以節省記憶體
有時候串列并不是最好的選擇,假如我們有一個非常大的串列,有10000個元素,我們想計算所有元素的總和,雖然可以用串列來做,當如果資料量特別大的話我們可能會遇到記憶體問題,更好的解決方案是使用生成器,
dataList = [i for i in range(10000)]
print(sum(dataList))
dataGen = (i for i in range(10000))
print(sum(dataGen))
輸出:
串列生成式與生成器具有相同的語法,不同點在于串列生成式使用的是中括號,而生成器使用的是小括號,
生成器通過類似于懶加載的方式計算我們需要的元素,因此它一次只生成一個元素,并且只在需要的時候才生成,
我們可以使用 sys 的 getsize() 方法看一下串列和生成器的大小,
import sys
dataList = [i for i in range(10000)]
print(sys.getsizeof(dataList), "bytes")
dataGen = (i for i in range(10000))
print(sys.getsizeof(dataGen), "bytes")
輸出:
85176 bytes
112 bytes
6. 在字典中獲取元素使用.get()并且設定默認值
假設我們有一個字典,其中包括不同的鍵,比如商品和價格,在我們的代碼中的某個點,想要獲得商品的價格,
當我們用 [] 簡單的訪問鍵時,如果鍵不在字典中,那么代碼將會報錯,引發一個 KeyError ,
dataDict = {
"name": "Tesla",
"price": 250000
}
print(dataDict["count"])
報錯:
Traceback (most recent call last):
File "mian.py", line 5, in <module>
print(dataDict["count"])
KeyError: 'count'
更好的方式是使用 .get() 方法,此時如果鍵不存在,則不會引發 KeyError ,而是回傳一個默認值,如果我們不指定默認值,它會直接回傳None,如果我們指定默認值,那么它會回傳我們指定的默認值,
dataDict = {
"name": "Tesla",
"price": 250000
}
print(dataDict.get("count"))
print(dataDict.get("count", 0))
輸出:
None
0
7. 計數器collections.Counter
如果你想計算串列中元素的數量,Python中有一個非常方便的工具,
from collections import Counter
data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)
print(counter)
輸出:
Counter({9: 5, 7: 4, 5: 3, 3: 2, 1: 1})
Counter 可以統計串列中不同元素的數量,并且按照出現次數降序排列,這比我們自己計算要好得多,
如果你想知道某個元素的個數的話,可以直接通過 [] 訪問,如果這個元素不存在,那么將回傳0,并且還可以通過 most_common() 方法回傳排名靠前的幾個元素,
from collections import Counter
data = [1, 3, 3, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 9]
counter = Counter(data)
print(counter[7])
print(counter[11])
print(counter.most_common(2))
輸出:
4
0
[(9, 5), (7, 4)]
8. 使用f-String格式化字串(適用于Python 3.6+)
f-String在我看來是最佳的格式化字串方法,我們只需要在字串前寫一個f,然后在字串內部可以直接使用大括號來嵌入變數或運算式,
data = https://www.cnblogs.com/sn520/archive/2022/01/04/{
"name": "Alex", "age": 18}
string = f"I'm {
data['name']} and I am {
data['age']} years old."
print(string)
輸出:
I'm Alex and I am 18 years old.
這種方式更簡單、更簡潔、速度也更快,
9. 使用.join()拼接字串
假如我們有一個包含不同字串的串列,我們想把所有的字串通過空格拼接在一起,千萬不要再用 for 回圈一個一個遍歷然后拼接了,一種更簡潔的方法是通過 .joint() 方法,它可以使用指定的字符將字串拼接起來,
strings = ["Hello", "World", "!"]
print(" ".join(strings))
print("_".join(strings))
輸出:
Hello World !
Hello_World_!
10. 使用雙星號語法合并字典(適用于Python 3.5+)
如果我們有兩個字典,并且希望將其合并成一個,此時我們可以使用雙星號 ** 和大括號 {} 語法,
info1 = {
"name": "Alex", "age": 18}
info2 = {
"name": "Alex", "city": "Bei Jing"}
info = {
**info1, **info2}
print(info)
輸出:
{'name': 'Alex', 'age': 18, 'city': 'Bei Jing'}
以上就是這篇文章跟大家分享的小技巧,
如果你覺得這篇文章對你有幫助的話,歡迎一鍵三連~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403533.html
標籤:其他
