第三章 高階特性

2022-05-18 07:52:21 字數 4531 閱讀 5346

當要取list,tuple和str的某個元素到某個元素, 除了逐個列出以外, 還可以用切片(slice)來完成.

使用方法:

名字[起始index : 結束index]

>>> l = ['michael', 'sarah', 'tracy', 'bob', 'jack']

>>> l[0:3]

['michael', 'sarah', 'tracy']

表示從起始索引開始, 逐個取值, 但是結束於結束索引前乙個元素.

當結束index不寫的時候取元素取到最後

同理起始index不寫表示從第乙個開始

>>> l[-2:]

['bob', 'jack']

可以使用切片的有list, tuple, str 

利用for迴圈來遍歷list和tuple等, 這種遍歷叫做迭代(iteration)

迭代的方式主要是採用for..in的方式

判斷該物件是否可以迭代

匯入from collections import iterable

利用isinstance(判斷的物件, iterable)

其中isinstance方法不僅能夠判斷迭代器的型別, 還可以python的其餘任意型別

>>> from collections import iterable

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

true

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

true

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

false

迭代字典元素的三種方法

方法一 遍歷key

>>> d = 

>>> for key in d:

... print(key)

...acb

方法二 遍歷value

>>> d = 

>>> for value in d.values():

... print(value)

... 13

2

方法三 同時迭代key和value

>>> d = 

>>> for k,v in d.items():

... print("key={},value={}".format(k,v))

...

key=c,value=3

key=a,value=1

key=b,value=2

>>>

迭代的時候獲取索引值, 課使用內建的方法enumerate來實現

>>> for i, value in enumerate(['a', 'b', 'c']):

... print(i, value)

...0 a

1 b2 c

列表生成式(list comprehensions), 主要是用來建立list的生成式

方法一:

list(range(n, m))

獲取的值為n, n+1, ... ,m-1

方法二:

[ x * x  for x in range(1, 11) if x % 2 == 0 ]

例子1

>>> [x * x for x in range(1, 11)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

例子2

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4, 16, 36, 64, 100]

例子3

>>> [m + n for m in 'abc' for n in 'xyz']

['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']

例子4

>>> import os # 匯入os模組,模組的概念後面講到

>>> [d for d in os.listdir('.')] # os.listdir('.')可以列出 當前 檔案和目錄

['元類.py', '複習.py', '新式類與經典類.py', '類.py', '練習1.py']

例子5

>>> d = 

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

['y=b', 'x=a', 'z=c']

例子6>>> [s.lower() for s in l]

生成器(generator), 作用與列表生成式類似. 生成器產生的原因是列表生成式是生成的列表, 但是由於記憶體的限制, 列表生成式能夠生成的數量是有限制的

生成器的最簡單的寫法就是將列表生成式的改為()

>>> l = [x * x for x in range(10)]

>>> l

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> g = (x * x for x in range(10))

>>> g

at 0x1022ef630>

獲取生成器生成的元素

方法一: 用next()方法獲取

>>> next(g)

0>>> next(g)

1>>> next(g)

4>>> next(g)

9>>> next(g)

16

方法二: 利用for..in方法迭代

>>> g = (x * x for x in range(10))

>>> for n in g:

... print(n)

... 01

491625

3649

6481

生成器的定義方法二:在函式中利用yield關鍵字

def fib(max):

n, a, b = 0, 0, 1

while n < max:

yield b

a, b = b, a + b

n = n + 1

return 'done'

這類的generator與函式的區別在於執行順序不同

函式: 從頭執行到尾,遇到return停止

generator: 從頭到尾執行,遇到yield停止,下次執行是從上次yield的位置繼續執行

由於這種generator也可以利用next和for來獲得資料, 且next一樣有可能越界, 故同樣常用for遍歷

def fib(max):

n, a, b = 0, 0, 1

while n < max:

yield b

a, b = b, a + b

n = n + 1

return 'done'

>>> for n in fib(6):

... print(n)

...112

358

由此可見, for迴圈無法得到最後return的值, 要獲得該值需要使用stopiteration異常

>>> g = fib(6)

>>> while true:

... try:

... x = next(g)

... print('g:', x)

... except stopiteration as e:

... print('generator return value:', e.value)

... break

...g: 1

g: 1

g: 2

g: 3

g: 5

g: 8

generator return value: done

C 高階學習第三章LINQ

using system.linq var res from m in masterlist from後面設定查詢的集合 where m.level 8 m.menpai 丐幫 where後面跟上查詢的條件 select m 表示m的結果集合返回 var res masterlist.where m...

高階程式設計 python 第三章作業

3 2 問候語 繼續使用練習3 1中的列表,但不列印每個朋友的姓名,而為每人列印一條訊息。每條訊息都包含相同的問候語,但抬頭為相應朋友的姓名。源 names baker jesse jimmy print hi names 0 print hi names 1 print hi names 2 輸出...

JS高階程式設計 第三章開始

三.基本概念 1.typeof 操作符 檢測資料型別 總共undefined boolean string number object function這6種型別 1.1 undefined 未宣告或未初始化 變數宣告之後預設取得了 undefined 值 1.2 null 空指標 定義的變數準備在...