1. 程式人生 > >python高階特性-列表生成式

python高階特性-列表生成式

列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。

舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做?方法一是迴圈:

>>> L = []
>>> for x in range(1, 11):
...    L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但是迴圈太繁瑣,而列表生成式則可以用一行語句代替迴圈生成上面的list:

>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

寫列表生成式時,把要生成的元素x * x放到前面,後面跟for迴圈,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法。

for迴圈後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:

>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

還可以使用兩層迴圈,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

三層和三層以上的迴圈就很少用到了。

運用列表生成式,可以寫出非常簡潔的程式碼。例如,列出當前目錄下的所有檔案和目錄名,可以通過一行程式碼實現:

>>> import os # 匯入os模組,模組的概念後面講到
>>> [d for d in os.listdir('.')] # os.listdir可以列出檔案和目錄
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

for迴圈其實可以同時使用兩個甚至多個變數,比如dictitems()可以同時迭代key和value:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
...     print(k, '=', v)
...
y = B
x = A
z = C

因此,列表生成式也可以使用兩個變數來生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

最後把一個list中所有的字串變成小寫:

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

相關推薦

Python高階特性——列表生成與生成器

列表生成式:   1)、    L=[x*x for x in range(1,11) if x%2==0]  等價於    L = []    for x in range(1, 11):       if x%2==0:         L.append(x * x)  2)、    a=[m

python高階特性-列表生成

列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。 舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)): >>

Day9 python高級特性-- 列表生成 List Comprehensions

roc 更多 篩選 implicit os模塊 CI 但是 lib div Python內置的非常簡單卻強大的可以用來創建list的生成式。 私理解為,就是for循環出來的結果搞成個list~~~~ 要生成順序增量list可以使用list(range(x,y))

python List Comprehensions(列表生成)

itl 51cto os模塊 技術分享 tle 出錯 生成式 oos pri 列表生成式: 創建List一、普通創建List#!/usr/bin/python#common establish waylis1 = [];for x in range(1, 10): l

python基礎之列表生成

例1: >>> List=[x for x in range(10)] >>> List [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 等價於: >>> List=[] >>> for x in ra

python語法_列表生成_生成

python 類比 span 生成器 進行 生成式 什麽 next 之前 列表生成式 a = [x for x in range(10)] print(a) x 可進行操作 a = [x*2 for x in range(10)] print(a) x甚至可以為函數, de

Python中list列表生成如何操作使用?list詳解

列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。 一、舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):

【廖雪峰Python習題集】列表生成

如果list中既包含字串,又包含整數,由於非字串型別沒有lower()方法,所以列表生成式會報錯: >>> [s.lower() for s in L] Traceback (mos

Python學習:列表生成列表生成器

一、列表生成式 列表生成式:顧名思義就是python中生成列表的表示式。運用列表生成式可以快速的生成列表,程式碼卻很簡潔。 示例一: 如要生成 [1, 2, 3, 4, 5, 6, 7, 8, 9] 列表: lb = [x for x in ran

07-python學習筆記-列表生成

2017.6.4 參考資料 可以使用List Comprehensions來建立list,它是Python內建的,非常簡單,非常強大。 例子1 要生成list[1,2,3,4,5,6],使用list(range(1,7)) >

Python生成器和列表生成

生成器: 在Python中, 這種一邊迴圈一邊計算的機制, 稱為生成器:generator 列表生成式:L(list) = [x * x for x in range(10)] 生成器:    g(generator) = (x * x for x in range(10)

python中的列表生成 | 字典生成

1.列表生成式 列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。 舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))

python 迴圈與列表生成

一般而言,在迴圈與列表生成式都可選的時候,列表生成式感覺速度會更快一點,做一個對比試驗: # python3 import time def compare_time(N): start

python三元表示式+列表生成

三元表示式長的樣子大概是這樣:def max1(a,b): return a if a > b else b #相當於C中的a>b?a:b print(max1(4,5)) #5然後列表生成式大概是這樣:a = [1, 2, 3, 4, 5] b =

Python(十一) 列表生成

要生成[1x1, 2x2, 3x3, …, 10x10]怎麼做? 方法一是迴圈: L=[] for x in range(1,11): L.append(x*x) print(L) 方法二、使用列表生成式 print([x * x for

Python(七)語法 高階特性 切片 | 迭代(迴圈)| 列表生成 | 生成器 | 迭代器

切片 取一個list或tuple的部分元素是非常常見的操作 有一個list[0,1,2,3,4,5]如果我們要取前n個元素比如說3個數 一般做法是 >>> L=[] >>> n=3 >>> for i in range(n): .

python高階特性:切片/迭代/列表生成/生成器

廖雪峰老師的教程上學來的,地址:python高階特性  下面以幾個具體示例演示用法: 一、切片 1.1 利用切片實現trim def trim(s): while s[:1] == " " or s[-1:] == " ": # 若第1個元素或最後1個元素為空格 if

Python高階特性(切片 迭代 列表生成 生成器 迭代器)學習筆記

在Python中,程式碼不是越多越好,而是越少越好。程式碼不是越複雜越好,而是越簡單越好。 基於這一思想,Python中有非常有用的高階特性,1行程式碼能實現的功能,決不寫5行程式碼。請始終牢記,程式碼越少,開發效率越高。 切片 (Slice) 切

python切片、迭代、生成器、列表生成高階特性學習

python高階特性 1行程式碼能實現的功能,決不寫5行程式碼。請始終牢記,程式碼越少,開發效率越高。 切片 當我們要取一個list中的前n各元素時,如果前n個少的話,我們還可以一個一個的取,但

Python學習筆記--3、高階特性-切片、迭代、列表生成、生成器、迭代器

廖老師在這個地方提到了,在Python 中,並不是寫的程式碼越多越好,而是寫的程式碼越少越好,月簡單越好。 1、切片  什麼是切片,簡單來說就是對list或者tuple中的部分元素進行取出操作。例子如下: 應注意的是,python的首位的元素的編號是0,所以,要確定好[