內(nèi)置序列
容器序列
list, tuple, collections.deque等這些序列能存放不同類型的數(shù)據(jù)
扁平序列
str, byte, bytearray, memoryview, array.array, 這些序列只能容納一種類型數(shù)據(jù)
以上,容器序列存放的是他們所含任意類型對象的引用,而扁平序列存放的是值而不是引用
列表(list)是最基礎(chǔ)也是最重要的序列類型
列表推導(dǎo)>>> symbols = "中華人民共和國" >>> codes = [ord(symbol) for symbol in symbols] >>> codes [20013, 21326, 20154, 27665, 20849, 21644, 22269]
列表推導(dǎo)由for循環(huán)變換而來,增強(qiáng)可讀性的同時,也使得代碼更加簡潔
python會忽略代碼里[]/()/{}中的換行,在其中可以省略續(xù)行符 ""
生成器表達(dá)式生成器的語法和列表推導(dǎo)差不多,只是把方括號換成圓括號
>>> symbols = "中華人民共和國" >>> tuple(ord(symbol) for symbol in symbols) (20013, 21326, 20154, 27665, 20849, 21644, 22269) >>> import array >>> array.array("I", (ord(symbol) for symbol in symbols)) array("I", [20013, 21326, 20154, 27665, 20849, 21644, 22269])
(1) 如果生成器表達(dá)式是一個函數(shù)唯一的參數(shù),那么這個參數(shù)不需要額外的括號
(2) array的構(gòu)造方法需要兩個參數(shù),所以生成器表達(dá)式需要被括號圍起來
list.sort 方法的功能是將序列就地排序,即不會重新創(chuàng)建一個數(shù)組,將原數(shù)組復(fù)制過來
與list.sort不同的是,序列的內(nèi)置函數(shù)sorted的功能雖然也是排序,但是會重新創(chuàng)建一個數(shù)組,不會對原數(shù)組做任何改動
>>> fruits = ["grape", "respberry", "apple", "banana"] >>> sorted(fruits) ["apple", "banana", "grape", "respberry"] >>> fruits ["grape", "respberry", "apple", "banana"] >>> sorted(fruits, key=len) ["grape", "apple", "banana", "respberry"] >>> sorted(fruits, key=len, reverse=True) ["respberry", "banana", "grape", "apple"] >>> fruits ["grape", "respberry", "apple", "banana"] >>> fruits.sort() >>> fruits ["apple", "banana", "grape", "respberry"]
由以上的例子可以看出兩者的差別,而sorted函數(shù)還接受key, reverse兩個參數(shù)
其中,參數(shù)key表示比較的標(biāo)準(zhǔn),而reverse表示是否要逆序(True)
函數(shù)bisect(haystack, needle)可實(shí)現(xiàn)在haystack(干草堆,一個有序序列)中找到needle(針)的位置,該位置滿足的條件是,把needle插入該函數(shù)所搜索到的位置后,整個haystack依然保持有序
import bisect import sys import random haystack = [1, 4, 5, 6, 8, 12, 15, 20, 21, 23, 23, 26, 29, 30] needles = [0, 1, 2, 5, 8, 10, 22, 23, 29, 30, 31] row_fmt = "{0:2d} @ {1:2d} {2}{0:<2d}" def demo(bisect_fn): for needle in reversed(needles): position = bisect_fn(haystack, needle) offset = position * " |" print(row_fmt.format(needle, position, offset)) if __name__ == "__main__": if sys.argv[-1] == "left": bisect_fn = bisect.bisect_left else: bisect_fn = bisect.bisect_right print("Demo: ", bisect_fn.__name__) print("haystack ->", "".join("%2d" % n for n in haystack)) demo(bisect_fn) print(" #################insort###############") size = 7 # random.seed(1729) my_list = [] for i in range(7): new_item = random.randrange(size * 2) bisect.insort(my_list, new_item) print("%2d ->" % new_item, my_list) #############運(yùn)行結(jié)果################ Demo: bisect_right haystack -> 1 4 5 6 8121520212323262930 31 @ 14 | | | | | | | | | | | | | |31 30 @ 14 | | | | | | | | | | | | | |30 29 @ 13 | | | | | | | | | | | | |29 23 @ 11 | | | | | | | | | | |23 22 @ 9 | | | | | | | | |22 10 @ 5 | | | | |10 8 @ 5 | | | | |8 5 @ 3 | | |5 2 @ 1 |2 1 @ 1 |1 0 @ 0 0 #################insort############### 9 -> [9] 7 -> [7, 9] 1 -> [1, 7, 9] 4 -> [1, 4, 7, 9] 5 -> [1, 4, 5, 7, 9] 12 -> [1, 4, 5, 7, 9, 12] 5 -> [1, 4, 5, 5, 7, 9, 12]
*bisect其實(shí)是bisect_rihght函數(shù)的縮寫,其返回的插入位置是原始序列與被插入元素相等元素位置的 右邊 ,該函數(shù)還有一個姊妹函數(shù)bisect_left,其返回的插入位置是原始序列與被插入元素相等元素位置的 左邊
書中還有推薦一個網(wǎng)站 Python Tutor , 是一個對python運(yùn)行原理進(jìn)行可視化分析的工具。
注: 以上內(nèi)容主體均來自于《流暢的python》書中第2章 序列構(gòu)成的數(shù)組
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42158.html
摘要:貢獻(xiàn)者飛龍版本最近總是有人問我,把這些資料看完一遍要用多長時間,如果你一本書一本書看的話,的確要用很長時間。為了方便大家,我就把每本書的章節(jié)拆開,再按照知識點(diǎn)合并,手動整理了這個知識樹。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 貢獻(xiàn)者:飛龍版...
摘要:我們還可以給切片進(jìn)行命名,有名字的切片,顯然更具有可讀性。對切片賦值時,賦值符號右側(cè)必須是一個可迭代對象,即使這個對象只包含一個元素,否則會提示錯誤。注以上內(nèi)容主體來自于流暢的一書中切片和切片原理 切片是python中列表(list)、元組(tuple)、字符串(str)等序列類型都支持的一種操作,但實(shí)際上切片的功能比人們所想象的要強(qiáng)大的多。 切片區(qū)間為什么會忽略最后一個元素 當(dāng)只有...
摘要:會依次將中的數(shù)據(jù)傳遞到中,根據(jù)返回的或者,留下或者拋棄這個值。而對于字符串,則是根據(jù)字符串對應(yīng)的碼表進(jìn)行排序。同時也是一個高階函數(shù),可以實(shí)現(xiàn)自定義的排序方式。 map/reduce是一種編程思想,在各個領(lǐng)域都有它的實(shí)踐。網(wǎng)上有一個簡單的例子解釋map/reduce。比如說你需要數(shù)一下某一個圖書館中有多少本藏書。最傻瓜的做法就是排一個人從頭數(shù)到尾。這樣速度慢,低效。另一種方法就是先將圖書...
摘要:導(dǎo)語本文章匯總了本人在學(xué)習(xí)基礎(chǔ)之緒論篇數(shù)據(jù)結(jié)構(gòu)篇函數(shù)篇面向?qū)ο笃刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門的朋友們可以按需查看并交流。 導(dǎo)語:本文章匯總了本人在學(xué)習(xí)Python基礎(chǔ)之緒論篇、數(shù)據(jù)結(jié)構(gòu)篇、函數(shù)篇、面向?qū)ο笃⒖刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門Python的朋友們可以按需查看并交流。 第一部分:緒論篇 1、Python數(shù)據(jù)模型 第二部分:數(shù)據(jù)結(jié)構(gòu)篇 2、序列構(gòu)成...
摘要:學(xué)習(xí)筆記起始結(jié)束步長步長可以為負(fù)數(shù),要求結(jié)束起始倒序相乘強(qiáng)制轉(zhuǎn)成元組,不可變的,可作為的或者函數(shù)的多個返回值可用函數(shù)效果為插入到,找到返回,找不到返回找到返回,找不到返回,并且插入鍵值對,返回列表返回迭代器導(dǎo)入賦值序列解包三元運(yùn)算如果為執(zhí) Python學(xué)習(xí)筆記 1.List [起始:結(jié)束:步長] ?步長可以為負(fù)數(shù),要求結(jié)束>起始 ?倒序 a = b[::-1] ?相乘 [42] * 3...
閱讀 3265·2021-09-02 15:41
閱讀 2829·2021-09-02 09:48
閱讀 1368·2019-08-29 13:27
閱讀 1157·2019-08-26 13:37
閱讀 832·2019-08-26 11:56
閱讀 2479·2019-08-26 10:24
閱讀 1638·2019-08-23 18:07
閱讀 2615·2019-08-23 15:16