切片:對列表、元組、字串、字典取中間的一部分,在c中一般是通過for迴圈拷貝/memcpy/strcat等操作。而python提供了更方便的切片操作符[m:n]:前閉後開,如果從0取m可以省略;如果只用[:]就是切整片;也可以從尾端切片[-m:]:前後的閉區間。
列表生成式:list(range(m,n)):構造乙個大於等於m小於n的列表;對於想生成複雜的列表要用列表生成式:[生成物件的模型, for 變數 in 可迭代的物件 附加條件表示式]
(1*1,2*2.。。且能被2整除的列表)方法有:最簡單的方法:[x * x for x in range(1, 11) if x % 2 == 0 ] 或者
>>> l =
其它複雜的生成式舉例:
迭代:對列表、元組、字串、字典、生成器的遍歷稱為迭代,對任何可迭代的物件都可以用for迴圈:關於字典的迭代需要注意的是:預設是對鍵的迭代,如果要對值切片要用.value()的方法;要對鍵 和值同時迭代需要用到.item()的方 法:for k, v in d.items(): print(k,':',v) #『:』是新增的連線符。
problem1: 如何判斷乙個物件是可迭代物件呢?方法是通過 collections 模組的 iterable 型別判斷:
>>> from collections import iterable
>>> isinstance('abc', iterable) # str 是否可迭代
problem2:如何對list的下標和元素同時迭代:答案是利用python 內建的 enumerate 函式可以把乙個 list 變成索引-元素對,這樣就可以在 for 迴圈中同時迭代索引和元素本身:
>>> for i, value in enumerate(['a', 'b', 'c']):
... print(i, value)
...0 a
1 b2 c
生成器:產生背景:list可以產生大量的列表元素,但比較佔儲存空間,為了能推算後續結果又不想生成列表那麼就可以用生成器了genarator
建立方法:方法一:將列表生成式的【】改成?();方法2 :用函式的方法+yied關鍵字
特點:1 當輸入生成器不輸出結果資料而只是說明生成器 2可以用next(生成器)遞推出下乙個結果直到stopiteration 錯誤或者for迴圈輸出所有避免(stopiteration 錯誤)
;3函式式生成器每遇到yield就產生中斷(關鍵字yield也稱為一般函式和函式式生成 器的最基本區別,還有2點:呼叫後生成器不輸出結果值,可以用next()函式)
迭代器:可表示無限大的資料流。能用for迴圈的物件都是可iterable 迭代的(isinstance(物件, iterable) 來判斷),但不一定是迭代器iterator (是否可next(迭代器物件),或用isinstance(物件, iterator) 來判斷是否是迭代器)判斷是否是迭代器,通過iter(可迭代物件)將可迭代但不是迭代器 的轉變為迭代器。
Python學習之高階特性詳解
列表生成式 list comprehensions 切片和迭代就不說了,這裡直接先看一下列表生成式吧,從名字就能大概猜出這是生成列表的一些方法,比如 如何生成 1 1,2 2,10 10 可以用迴圈不斷向列表尾部新增元素,如果使用 pythonic 的方法,也就是列表生成式,則是 x x for x...
Python之高階特性(2)
一 列表生成式 1 生成abc與def的全排列 2 1 輸出列表裡的名字 並且第乙個字母大寫 2 當列表裡有名字是非法字元時候,輸出列表裡的名字 並且第乙個字母大寫 3 找出指定目錄下以.log結尾的檔案 import os模組 os.listdir 檔名 檢視目錄下面的所有檔案 二 生成器 為什麼...
Python自學之高階語法特性
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...