?? 作者:韓信子@ShowMeAI
?? Python3?技能提升系列:https://www.showmeai.tech/tutorials/56
?? 本文地址:https://www.showmeai.tech/article-detail/303
?? 宣告:著作權所有,轉載請聯系平臺與作者并注明出處
?? 收藏ShowMeAI查看更多精彩內容
Python 是一個簡單易上手可讀性強且功能強大的編程語言,它有一些獨特的技巧和寫法,可以在不影響可讀性的情況下大大縮短我們的 Python 代碼,讓它看起來更加緊湊和高級,
在本篇內容中ShowMeAI 給大家總結最常用的『單行代碼(one-liner )』技巧,讓你的代碼加分更加『高級』!
推薦入門的小伙伴閱讀ShowMeAI的 圖解Python編程:從入門到精通系列教程 系列教程,學習全套 Python 知識!
以下所有的代碼都可以在 在線 Python 編譯器 中運行,快試起來!
?? 1.單行 if - else 陳述句
if-else 陳述句是我們在 Python 中學習的基礎邏輯判斷語法之一, 我們通常會以分支的形式來書寫這個陳述句,但 Python 其實能支持 if 和 else 陳述句在同一行,簡單快捷完成判斷,
如下為代碼示例:
age = 18
valid = "你是成年人"
invalid = "你是未成年人"
# 單行代碼
print(valid) if age >= 18 else print(invalid)
?? 2.串列推導式
串列推導式是 Python 獨有且非常強大的語法,它提供了一種簡短的語法來根據現有串列的值創建串列, 相比函式和回圈更緊湊,甚至還可以加入條件判斷,
串列推導式的基本語法如下:
[expression for item in list]
以下是一個代碼應用示例:
countries = ['united states', 'brazil', 'united kingdom', 'japan']
# 帶條件判斷的串列推導式
capitalized = [country.title() for country in countries if country.startswith('u')]
print(capitalized)
['United States', 'United Kingdom']
串列推導式非常簡潔,但是大家注意,不要把過于復雜的功能嵌套于串列推導式中,我們還是要注意保持代碼的可讀性哦!
?? 3.字典推導式
與串列推導式類似,Python 中也有字典推導式,字典推導式提供了一種簡短的語法,在一行代碼中創建字典, 語法如下:
{key: value for key, value in iterable}
下面是一個簡單的代碼示例:
dict_numbers = {x:x*x for x in range(1,6) }
print(dict_numbers)
{1: 1, 2: 4, 3: 9, 4: 16, 5:25}
?? 4.合并詞典
我們如果需要合并字典,有多種方法,可以使用 update()方法, merge()運算子,包括上面提到的字典推導式,
一種非常簡單的方法,是通過使用解包運算子 **,我們添加 **在每個字典前面,組合為一個新的字典來存盤輸出,如下示例:
dict_1 = {'a': 1, 'b': 2}
dict_2 = {'c': 3, 'd': 4}
# 合并字典
merged_dict = {**dict_1, **dict_2}
print(merged_dict)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
?? 5.洗掉串列重復元素
一個非常高頻的處理是對串列元素慮重,這時一個最快捷的方式是利用 Python 中的集合set,集合是元素的無序集合, 我們只需要將串列轉為集合再轉回為串列即可,
示例如下:
numbers = [1,1,1,2,2,3,4,5,6,7,7,8,9,9,9]
print(list(set(numbers)))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
?? 6.單行多變數賦值
如果我們需要為多個變數賦值,我們可以一行中完成這個程序,如下示例:
# 單行賦值多變數
a, b, c = 1, "abc", True
print(a, b, c)
1 'abc' True
?? 7.串列元素篩選
另外一個非常常見的場景是,對串列元素進行篩選過濾,保留其中滿足某些條件的元素結果為新的串列,這個功能的實作方法也很多,一個簡單的方法是使用 filter()函式,
基本語法如下:
filter(function, iterable)
我們甚至可以借助lambda匿名函式來定義過濾條件,配合filter,可以在一行中快速完成串列元素篩選的功能,比如下例我們篩選出串列中的所有偶數:
my_list = [10, 11, 12, 13, 14, 15]
# 選出所有偶數
print(list(filter(lambda x: x%2 == 0, my_list )))
[10, 12, 14]
?? 8.字典排序:按照 key
對于復雜一點點的結構,比如 Python 中的字典,如果我們要依據key進行排序,沒辦法直接sort,但是我們可以借助sorted函式完成這個任務,比如下例中我們根據商品的名稱排序:
product_prices = {'Z': 9.99, 'Y': 9.99, 'X': 9.99}
print({key:product_prices[key] for key in sorted(product_prices.keys())})
{'X': 9.99, 'Y': 9.99, 'Z': 9.99}
?? 9.字典排序:按照 value
有時候我們會需要對字典基于value排序,這個任務同樣可以基于sorted()函式完成,我們先看看所有sorted()函式的引數,如下,
sorted(iterable, key=None, reverse=False)
要對字典按照value進行排序,我們需要使用 key 引數,這個引數接受一個函式,函式的回傳值作為排序的依據, 這里配合lambda函式可以很方便地完成任務,
假設我們有一個包含人口值的字典,我們想按值對其進行排序,
population = {'USA':329.5, 'Brazil': 212.6, 'UK': 67.2}
print(sorted(population.items(), key=lambda x:x[1]))
[('UK', 67.2), ('Brazil', 212.6), ('USA', 329.5)]
我們發現回傳的結果是一個串列,我們可以利用前面提到的字典推導式,對其進行簡單處理,如下:
population = {'USA':329.5, 'Brazil': 212.6, 'UK': 67.2}
print({k:v for k, v in sorted(population.items(), key=lambda x:x[1])})
{'UK': 67.2, 'Brazil': 212.6, 'USA': 329.5}
參考資料
- ?? 在線 Python 編譯器:http://blog.showmeai.tech/python3-compiler/
- ?? 圖解Python編程:從入門到精通系列教程:https://www.showmeai.tech/tutorials/56
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/501925.html
標籤:其他
上一篇:資料庫注入提權總結(四)
