當要取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 空指標 定義的變數準備在...