python初學第五天 高階特性之列表生成式

2021-10-03 22:40:07 字數 3670 閱讀 2079

如果要生成list [1,2,3,4,5,6,7,8,9,10] 可以使用list(range(1,11))

但是如果要生成x*x

首先可以通過迴圈來新增元素到列表後部,但是較為繁瑣

第二種方法則是使用列表生成式來生成list

>>

>

[x * x for x in

range(1

,11)]

[1,4

,9,16

,25,36

,49,64

,81,100

]

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',,

'desktop'

,'documents'

,'downloads'

,'library'

,'movies'

,'music'

,'pictures'

,'public'

,'virtualbox vms'

,'workspace'

,'xcode'

]

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

>>

> d =

>>

>

for k, v in d.items():

...print

(k,'='

, v)..

.y = b

x = a

z = c

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

>>

> d =

>>

>

[k +

'='+ v for k, v in d.items()]

['y=b'

,'x=a'

,'z=c'

]

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

>>

> l =

['hello'

,'world'

,'ibm',]

[s.lower(

)for s in l]

['hello'

,'world'

,'ibm'

,]

對於if, 當if放在 列表生成式的for的後面時,表示的是乙個篩選條件不能帶else,而當if放在前面時,則表示的是乙個 表示式,必須根據x計算出乙個結果,而對於奇數,無法計算結果,所以需要加乙個else

>>

>

[x if x %2==

0for x in

range(1

,11)]

file ""

, line 1

[x if x %2==

0for x in

range(1

,11)]

^syntaxerror: invalid syntax

>>

>

[x if x %2==

0else

-x for x in

range(1

,11)]

[-1,

2,-3

,4,-

5,6,

-7,8

,-9,

10]

如果list中既包含字串,又包含整數,由於非字串型別沒有lower()方法,所以列表生成式會報錯:

>>

> l =

['hello'

,'world',18

,,none

]>>

>

[s.lower(

)for s in l]

traceback (most recent call last)

: file ""

, line 1,in

file ""

, line 1,in

attributeerror:

'int'

object has no attribute 'lower'

使用內建的isinstance函式可以判斷乙個變數是不是字串:

>>

> x =

'abc'

>>

> y =

123>>

>

isinstance

(x,str

)true

>>

>

isinstance

(y,str

)false

請修改列表生成式,通過新增if語句保證列表生成式能正確地執行:

# -*- coding: utf-8 -*-

l1 =

['hello'

,'world',18

,,none

]

l2 =

[x.lower(

)for x in l1 if

isinstance

(x,str

)]```

```python

# 測試:

print

(l2)

if l2 ==

['hello'

,'world',]

:print

('測試通過!'

)else

:print

('測試失敗!'

)

記住,函式後面一定要記得加括號,一定

python初學第五天 高階特性之切片

切片就是按位置取出 乙個list或者tuple 的一部分 l michael sarah tracy bob jack l 0 3 michael sarah tracy 切片操作 l 0 n 指從取出前n個元素,即從索引為0 到 n 1 的元素,不包括n,在切片操作中 只取到索引為 n 1的元素,...

初學Python第五天

繼上次10.3賦值運算子之後 4 位運算子 定義 把數字看做二進位制進行計算的運算子。例如 1 按位 與 運算子 只要兩個對應的二進位制位有乙個為0,則該位結果為0,否則為1 60 13 輸出結果12,二進位制解釋 00001100。2 按位 或 運算子 只要兩個對應的二進位制位有乙個為1,則該位結...

2020 3 15初學python第五天

字典dict 不是序列,用大括號括起來,體現對映關係,由鍵和值組成。如 訪問字典的方法 keys 返回字典所有的鍵 values 返回字典所有的值 items 把每乙個項 剪 值 以元組的形式列印出來 clear 清空乙個字典 update 更新字典 等 集合set 用大括號括起來,不反映對映關係,...