作者:韓信子@ShowMeAI
Python3 ◉ 技能提升系列:http://www.showmeai.tech/tutorials/56
本文地址:http://www.showmeai.tech/article-detail/303
聲明:版權所有,轉載請聯系平台與作者並注明出處
收藏ShowMeAI查看
Python 是一個簡單易上手可讀性強且功能強大的編程語言,它有一些獨特的技巧和寫法,可以在不影響可讀性的情況下大大縮短我們的 Python 代碼,讓它看起來更加緊湊和高級。
在本篇內容中ShowMeAI 給大家總結最常用的『單行代碼(one-liner )』技巧,讓你的代碼加分更加『高級』!
推薦入門的小伙伴閱讀ShowMeAI的 圖解Python編程:從入門到精通系列教程 系列教程,學習全套 Python 知識!
以下所有的代碼都可以在 在線 Python 編譯器 中運行,快試起來!
if-else 語句是我們在 Python 中學習的基礎邏輯判斷語法之一。 我們通常會以分支的形式來書寫這個語句,但 Python 其實能支持 if 和 else 語句在同一行,簡單快捷完成判斷。
如下為代碼示例:
age = 18
valid = "你是成年人"
invalid = "你是未成年人"
# 單行代碼
print(valid) if age >= 18 else print(invalid)
列表推導式是 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']
列表推導式非常簡潔,但是大家注意,不要把過於復雜的功能嵌套於列表推導式中,我們還是要注意保持代碼的可讀性哦!
與列表推導式類似,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}
我們如果需要合並字典,有多種方法,可以使用 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}
一個非常高頻的處理是對列表元素慮重。這時一個最快捷的方式是利用 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]
如果我們需要為多個變量賦值,我們可以一行中完成這個過程,如下示例:
# 單行賦值多變量
a, b, c = 1, "abc", True
print(a, b, c)
1 'abc' True
另外一個非常常見的場景是,對列表元素進行篩選過濾,保留其中滿足某些條件的元素結果為新的列表。這個功能的實現方法也很多,一個簡單的方法是使用 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]
對於復雜一點點的結構,比如 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}
有時候我們會需要對字典基於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}