Python自學之高階語法特性

2021-08-01 10:10:31 字數 2444 閱讀 7372

1-切片

切片用於提取一組資料list、tuple等中的一部分,個人感覺和matlab語法很相似,

例如

l

[0:3] #表示取l

[0],l

[1],l

[2]l

[:3] #與上面等價,初始或者結束為首尾位置,則可以縮寫

l[-2:0] #表示取倒數第乙個l

[-1]和倒數第二個l

[-2]

l[-2:] #與上面等價

l[0:5:2]#表示以2個2個取,得到l

[0],l

[2],l

[4]l

[::2] #表示2個2個取整個資料集

切片也同樣適用於字串,

'abcdefg'[0:2]  #結果取ab
2-迭代

python可以對任何可迭代物件進行迭代,迭代使用for x in y的形式進行迭代。

#d = 

for key in d: #遍歷d的key,輸出

print(key)

forvalue

in d.values() #用於迭代dict的value

for x,y in d.items() #用於同時迭代dict的key 和value

如何判斷是否為可迭代物件呢?

引入函式

>>> 

from collections import iterable

>>> isinstance('abc', iterable) # str是否可迭代

true

>>> isinstance([1,2,3], iterable) # list是否可迭代

true

>>> isinstance(123, iterable) # 整數是否可迭代

false

3-列表生成式

最簡單的列表生成

[x + 1 for x in range(1,5)]

[2,3,4,5]

增加條件的列表生成

[x + 1 for x in range(1,5) if x%2 ==0]

[3,5]

雙層列表生成

[x + y for x in

'abc'

for y in

'123']

['a1','a2','a3','b1','b2','b3','c1'

'c2','c3']

簡單應用,例如把list裡面的所有字串的第乙個字母變成小寫

m = ['he','she']

[l[0].lower() + l[1:] for l in m] #輸出['he','she']

4-生成器(generator)

利用列表生成式,我們可以一次性生成許多資料,如果我們只需要使用其中一部分,進行動態的生成,不用一次性占用很多記憶體,迴圈進行到**,就計算出下乙個值,就可以使用生成器,生成器的使用有兩種方法,

第一種,使用列表生成的generator:

>>>g = (x+1

for x in range(0,4)) #將變成()

>>>g

#不會輸出,因為這個時候g是乙個generator,還未開始動態生成

>>>g = (x+1

for x in range(0,4))

>>>for

value

in g:

print(value)12

34

第二種針對無法使用列表生成式寫出的複雜過程,可以使用函式進行generator,與一般函式不同的是,一般函式執行函式內部語句直到執行到return就退出函式體,generator的函式使用yield表示生成一次,執行到第乙個yield時候就出該值,然後從這個位置開始繼續執行下去,執行到最後一句語句或者return的時候就退出函式體。

def

tri(n):

l = [1]

while n > 0:

n =n - 1

yield l

l = [l[x] + l[x+1] for x in range(len(l)-1)]

l.insert(0,1)

for x in tri(4):

print(x)

#結果#[1]

#[1,1]

#[1,2,1]

#[1,3,3,1]

上述兩種方法都可以使用next()函式進行不斷求得下乙個數值,

tips

使用生成器生成的序列是一種惰性序列,他只在你需要的範圍內在需要的時候生成,並且可以是乙個無限序列,

Python之高階特性(2)

一 列表生成式 1 生成abc與def的全排列 2 1 輸出列表裡的名字 並且第乙個字母大寫 2 當列表裡有名字是非法字元時候,輸出列表裡的名字 並且第乙個字母大寫 3 找出指定目錄下以.log結尾的檔案 import os模組 os.listdir 檔名 檢視目錄下面的所有檔案 二 生成器 為什麼...

python學習之高階特性

切片 對列表 元組 字串 字典取中間的一部分,在c中一般是通過for迴圈拷貝 memcpy strcat等操作。而python提供了更方便的切片操作符 m n 前閉後開,如果從0取m可以省略 如果只用 就是切整片 也可以從尾端切片 m 前後的閉區間。列表生成式 list range m,n 構造乙個...

Python學習之高階特性詳解

列表生成式 list comprehensions 切片和迭代就不說了,這裡直接先看一下列表生成式吧,從名字就能大概猜出這是生成列表的一些方法,比如 如何生成 1 1,2 2,10 10 可以用迴圈不斷向列表尾部新增元素,如果使用 pythonic 的方法,也就是列表生成式,則是 x x for x...