中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python解析式有哪些

發布時間:2021-11-25 09:53:47 來源:億速云 閱讀:151 作者:iii 欄目:大數據

本篇內容介紹了“Python解析式有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Python解析式

在python中經常能夠看到形如ret = [x ** 2 for x in lst]這樣的賦值語句,對于從C++轉到python的人不太容易理解這種for循環的使用,這就是python為了簡潔而發明的新語法。python解析式有以下優點:

  • 代碼簡潔,可讀性強

  • 效率比普通迭代稍高

python的解析式具體分為以下四種:

  • 列表解析式

  • 生成器解析式

  • 集合解析式

  • 字典解析式

下面分別介紹這四種解析式的使用。

列表解析式

列表解析式的形式

  • [expr for e in iterator]

In [1]: lst = range(10)

In [2]: %%timeit
   ...: ret = [x ** 2 for x in lst]
   ...: 
100000 loops, best of 3: 5.28 μs per loop

In [3]: %%timeit
   ...: ret = []
   ...: for x in lst:
   ...:     ret.append(x ** 2)
   ...: 
100000 loops, best of 3: 6.09 μs per loop	# 耗時稍高

可以發現效率是要稍高一點,最主要的還是代碼簡潔。

列表解析式可以和if語句一起使用

例如篩選出列表lst中的偶數:

In [4]: ret = []

In [5]: for x in lst:
   ...:     if x % 2 == 0:
   ...:         ret.append(x)	# 使用for循環
   ...:         

In [6]: ret
Out[6]: [0, 2, 4, 6, 8]

In [7]: ret = [x for x in lst if x % 2 == 0]	# 使用列表解析式

In [8]: ret
Out[8]: [0, 2, 4, 6, 8]

列表解析式可以像for循環一樣使用if語句。

  • 帶多個if語句的,都可以轉化為條件的邏輯運算, 所以一般來說,不會帶多個if語句

列表解析式的for語句可以嵌套。

In [9]: (x, y) for x in range(0, 5) for y in range(5, 10)
  File "<ipython-input-9-825e2443da8b>", line 1
    (x, y) for x in range(0, 5) for y in range(5, 10)
             ^
SyntaxError: invalid syntax
# 說明列表解析式一定要使用中括號括起來

In [10]: [(x, y) for x in range(5) for y in range(5, 10)]
Out[10]: 
[(0, 5),
 (0, 6),
 (0, 7),
 (0, 8),
 (0, 9),
 (1, 5),
 (1, 6),
 (1, 7),
 (1, 8),
 (1, 9),
 (2, 5),
 (2, 6),
 (2, 7),
 (2, 8),
 (2, 9),
 (3, 5),
 (3, 6),
 (3, 7),
 (3, 8),
 (3, 9),
 (4, 5),
 (4, 6),
 (4, 7),
 (4, 8),
 (4, 9)]

In [11]: ret = []

In [12]: for x in range(5):
    ...:     for y in range(5, 10):
    ...:         ret.append((x, y))
    ...:         

In [13]: ret
Out[13]: 
[(0, 5),
 (0, 6),
 (0, 7),
 (0, 8),
 (0, 9),
 (1, 5),
 (1, 6),
 (1, 7),
 (1, 8),
 (1, 9),
 (2, 5),
 (2, 6),
 (2, 7),
 (2, 8),
 (2, 9),
 (3, 5),
 (3, 6),
 (3, 7),
 (3, 8),
 (3, 9),
 (4, 5),
 (4, 6),
 (4, 7),
 (4, 8),
 (4, 9)]

if語句的特殊用法

單行if語句的寫法和列表解析式很像。

表達式形式:x if cond else y

if和else必須同時存在。

下面以偶數求平方,奇數求立方為例進行演示

In [14]: ret = []

In [15]: for x in lst:
    ...:     if x % 2 == 0:
    ...:         ret.append(x ** 2)
    ...:     else:
    ...:         ret.append(x ** 3)
    ...:         

In [16]: ret
Out[16]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]

In [17]: x = 3
# if特殊用法
In [18]: x ** 2 if x % 2 == 0 else x ** 3
Out[18]: 27

In [19]: 3 if True else 4
Out[19]: 3
# 如果采用if特殊用法配合列表解析式 x if cond else y for ...
In [20]: [x ** 2 if x % 2 == 0 else x ** 3 for x in lst]
Out[20]: [0, 1, 4, 27, 16, 125, 36, 343, 64, 729]

生成器解析式

列表解析式返回的是一個列表,而生成器解析式返回的是一個解析式。列表解析式的中括號變成小括號就是生成器解析式了

In [1]: range(10000)
Out[1]: range(0, 10000)

In [2]: g = (x ** 2 for x in range(100000000000))

In [3]: g
Out[3]: <generator object <genexpr> at 0x7f9f08a5f0a0>

In [4]: next(g)
Out[4]: 0

In [5]: next(g)
Out[5]: 1

In [6]: next(g)
Out[6]: 4

列表解析式和生成器解析式的選擇

  • 需要用下標訪問的時候,用列表解析式

  • 只需要對結果迭代的時候,優先使用生成器解析式

集合解析式

將列表解析式的中括號換成大括號就是集合解析式了。

In [1]: lst = [2, 4, 5, 6, 3, 4, 2]

In [2]: s = {x for x in lst}

In [3]: s
Out[3]: {2, 3, 4, 5, 6}	# 可見列表解析式生成的時候會去掉重復,符合集合要求

In [4]: type(s)
Out[4]: set

字典解析式

字典解析式使用的也是大括號,但是和集合解析式不同的是在expr處使用的不是單個元素而是k,v對。

In [1]: {str(x): x for x in range(5)}
Out[1]: {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4}

這四種解析式中使用最廣泛的還是列表解析式,會經常有一些很巧妙的用法。

“Python解析式有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石楼县| 宾川县| 喀喇沁旗| 清水县| 闽清县| 平度市| 蒙阴县| 庆安县| 岳普湖县| 贵州省| 鄂托克前旗| 隆林| 平度市| 灵台县| 鱼台县| 长宁区| 泌阳县| 台东市| 温州市| 西安市| 扬中市| 枞阳县| 长沙县| 荔波县| 沙田区| 武胜县| 上林县| 清丰县| 新密市| 葫芦岛市| 平阳县| 怀远县| 梁山县| 长兴县| 彩票| 威远县| 阜阳市| 馆陶县| 黄梅县| 景东| 崇仁县|