程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

掌握這9個單行代碼技巧!你也能寫出『高端』Python代碼

編輯:Python

作者:韓信子@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 編譯器 中運行,快試起來!

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編程:從入門到精通系列教程 http://www.showmeai.tech/tutorials/56


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved