2.1内置序列类型的概览
Python标准库用C实现了丰富的序列类型
容器序列
list,tuple和collections.deque这些序列都能存放不同的数据类型。
扁平序列
str,bytes,bytearray,memoryview,array.array,这种序列只能容纳一种类型。
容器徐蕾存放的是他们所包含的任意类型的对象的引用,而扁平序列里存放的是值而不是引用。
不可变序列 (Sequence)
tuple、str、bytes
剩下的都是可变的 (MutableSequence)
2.2列表推导和生成器表达式
列表推导,我已经讲了多次,使用相对熟练,跳过。
生成器表达式与列表表达式在使用中,一个最大的好处,假如被for循环遍历,如果数据很大,用生成器表达式可以省下生成列表的开销。
2.3元祖不仅仅是不可变的列表
主要介绍了元祖的拆包赋值,已经*的使用。
In [88]: a,b,*rest = range(5) In [89]: a,b,rest Out[89]: (0, 1, [2, 3, 4])
In [90]: a,*body,c,d = range(10) In [91]: a,body,c,d Out[91]: (0, [1, 2, 3, 4, 5, 6, 7], 8, 9)
用起来还是很有意思的。
nametuple前面我已经介绍过了,不写笔记了,多本书上介绍,看来还是蛮重要的。
说明一点,nametuple构建的类的实例所消耗的内存跟元祖一样,因为不会用__dict__来存放这些实例的属性。
2.4切片
主要讲述了对对象进行切片,slice与切片赋值,切片赋值的对象一定要是可迭代对象
invoice = ''' 0.....6...........................40...........52...55........ 1909 Pimoroni PiBrella $17.50 3 $9.90 1910 ok123 456 789 $ 454 2 $ 234 1910 ok123 456 789 $ 454 2 $ 234 1910 ok123 456 789 $ 454 2 $ 234 ''' ski = slice(0, 6) line_items = invoice.split('\n')[2:] for item in line_items: print(item[ski])
/usr/local/bin/python3.7 /Users/shijianzhong/study/Fluent_Python/第二章/t2-4.py 1909 1910 1910 1910 Process finished with exit code 0
一个简单的slice的使用,平时一般我很少用。
切片可以增删改查,该的话,务必给一个可迭代对象。
Out[132]: [1, 2, 1, 2, 3, 4, 4, 5] In [133]: l = [1,2,3,4,5] In [134]: l = [0,1,2,3,4,5] In [135]: l[2:4] = 'hello' In [136]: l Out[136]: [0, 1, 'h', 'e', 'l', 'l', 'o', 4, 5] In [137]: del l[5:] In [138]: l Out[138]: [0, 1, 'h', 'e', 'l'] In [139]: l[2:4]='' In [140]: In [140]: l Out[140]: [0, 1, 'l']
上面就通过了简单的字符串切片赋值操作,很方便,由于字符串属于可迭代对象,可以在需要删除的部分直接赋值''空字符串既可。
2.5 对序号使用+和*
+和*都遵循这个规则,不修改原来的操作对象,而是构建一个全新的序列。
In [147]: l + (1,2,3) --------------------------------------------------------------------------- TypeError Traceback (most recent call last)in ----> 1 l + (1,2,3) TypeError: can only concatenate list (not "tuple") to list In [148]: l + [1,2,3] Out[148]: [0, 1, 'l', 1, 2, 3] In [149]: l * 3 Out[149]: [0, 1, 'l', 0, 1, 'l', 0, 1, 'l'] In [150]: l Out[150]: [0, 1, 'l']
只能跟同类型的相加。
In [151]: l = [[1,2,3]] In [152]: l1 = l * 3 In [153]: l1 Out[153]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]] In [154]: l1[0][0]= 'a' In [155]: l1 Out[155]: [['a', 2, 3], ['a', 2, 3], ['a', 2, 3]] In [156]:
乘号要注意,里面的元素都将指向同一个变量。
可以用列表生成式。
In [172]: l = [[1,2,3] for i in range(3)] In [173]: l Out[173]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]] In [174]: l[0][0] = 'a' In [175]: l Out[175]: [['a', 2, 3], [1, 2, 3], [1, 2, 3]]
2.6一个+=的谜题
In [177]: t = (1,2,[30,40]) In [178]: t[2] += [50,60] --------------------------------------------------------------------------- TypeError Traceback (most recent call last)in ----> 1 t[2] += [50,60] TypeError: 'tuple' object does not support item assignment In [179]: t Out[179]: (1, 2, [30, 40, 50, 60])
对一个元祖内元素,是列表进行了+=操作。有意思的是,由于元祖内的元素不能修改,所以报错了
但由于该元素是可变的,所以修改尽然又成功了,有意思。
作者得到是三个教训:
1、不要把可变对象放在元祖里面。
2、增量赋值不是一个原子操作。它虽然跑出了异常,但还是完成了操作。
3、我就不说了,他说查看那字节码很简单。。
2.8用bisect来管理已排序的序列。
这个有一个国内的链接使用记录:https://www.cnblogs.com/beiluowuzheng/p/8452671.html
bisect对于大型的已经排好序的元祖或者列表查找索引非常快,底层都用了2分查找的方法。
import bisect import sys import random HAYSTACK = [1, 3, 8, 13, 14, 15, 19, 21, 22, 24, 24, 25, 27, 28, 29] NEEDLES = [0, 1, 6, 9, 15, 21, 23, 25, 27, 28, 29, 30] ROW_FMT = '{0:2d} @ {1:2d} {2}{0:<2d}' # 利用了.foramt的格式化对齐<2左对齐 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 # 索引在相同数的右边,就是后面 print('Demo:', bisect_fn.__name__) print('haystack ->', ' '.join('%2d' % n for n in HAYSTACK)) demo(bisect_fn)
shijianzhongdeMacBook-Pro:第二章 shijianzhong$ python3 t2-8.py Demo: bisect_right haystack -> 1 3 8 13 14 15 19 21 22 24 24 25 27 28 29 30 @ 15 | | | | | | | | | | | | | | |30 29 @ 15 | | | | | | | | | | | | | | |29 28 @ 14 | | | | | | | | | | | | | |28 27 @ 13 | | | | | | | | | | | | |27 25 @ 12 | | | | | | | | | | | |25 23 @ 9 | | | | | | | | |23 21 @ 8 | | | | | | | |21 15 @ 6 | | | | | |15 9 @ 3 | | |9 6 @ 2 | |6 1 @ 1 |1 0 @ 0 0 shijianzhongdeMacBook-Pro:第二章 shijianzhong$ python3 t2-8.py left Demo: bisect_left haystack -> 1 3 8 13 14 15 19 21 22 24 24 25 27 28 29 30 @ 15 | | | | | | | | | | | | | | |30 29 @ 14 | | | | | | | | | | | | | |29 28 @ 13 | | | | | | | | | | | | |28 27 @ 12 | | | | | | | | | | | |27 25 @ 11 | | | | | | | | | | |25 23 @ 9 | | | | | | | | |23 21 @ 7 | | | | | | |21 15 @ 5 | | | | |15 9 @ 3 | | |9 6 @ 2 | |6 1 @ 0 1 0 @ 0 0
作者写的很漂亮的测试代码,逻辑清楚,格式化输出完整,大神就是大神。膜拜。
从1,15,21可以看出他们的索引其实是不一样的。
import bisect def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'): i = bisect.bisect(breakpoints, score) return grades[i] print([grade(score) for score in [50, 73, 80, 63, 97, 93, 98, 67, 68, 41]])
/usr/local/bin/python3.7 /Users/shijianzhong/study/Fluent_Python/第二章/t2-8-1.py ['F', 'C', 'B', 'D', 'A', 'A', 'A', 'D', 'D', 'F'] Process finished with exit code 0
这是一个通过索引,获取分数等级的代码,我就奇怪,这个bisect用在大量数据的时候比较好,为什么书上的实例都是小数据。
import bisect import random SIZE = 7 random.seed(1729) my_list = [] for i in range(SIZE): new_item = random.randrange(SIZE*2) bisect.insort(my_list, new_item) # 每次插入数据 print('%2d ->' % new_item, my_list)
/usr/local/bin/python3.7 /Users/shijianzhong/study/Fluent_Python/第二章/t2-8-2.py 10 -> [10] 0 -> [0, 10] 6 -> [0, 6, 10] 8 -> [0, 6, 8, 10] 7 -> [0, 6, 7, 8, 10] 2 -> [0, 2, 6, 7, 8, 10] 10 -> [0, 2, 6, 7, 8, 10, 10] Process finished with exit code 0
同样他也有bisect.insort_left
刚刚今天我用timeit做了一个测试,惊人。bisect的速度在大数据下跟index的速度简直是天壤之别。
l = [uuid.uuid4().int for i in range(10**7)] In [426]: l Out[426]: [130961955267366331713228587612281413150, 101168619383506800871032067138007901687, 230268143853013387044664472262098300983, 271666116513559436401883400443324603744, 277109119499575815471579530262910533167, 242138467892981735851802969498823916425, 319734003255500046469302361548047467408, 146169364593208751886340129000365239695, 54750985308411082302016400374175130030, 179708145775912716057389193726997441484, 94301037370394958603392733903293569413, 320244509261839681281499398165940646122, 16164483416326598245060638842401916751, 65904564024240252138659345330957090437, 166340439332797665602640740689288593450, 194316813095038682278459486040680711806, 255234376404225511013900242367724843574, 44276365019014977690638266028287802716, 22544256991002418986963476372601728719, 291578905653886451055946434719299852250, 294396108715512435973344274908266278191, 335281398231773798926010287087060539788, 234685390027958906135129616790958757775, 182718034399185276486462792112024710159, 230300029496425106921117477052699153585, 139297969956953783200521971495097938125, 24348723660883811799751214527918711780, 55327218903106735070817831797032115079, 242869286793723673771324974244489896662, 109638102941741080075887179763586967790, 230328644645765881161274514698170094354, 119794982640965680125583257007407260979, 84802898539621391567795522252261740670, 219064956764031754262905647718847907702, 228013409719684751490634449352334619712, 336154948916128986724952431069464003714, 118921007996168674039314744390912222999, 53987656983897747922735335844588070906, 229621452285005011429483122303865792796, 212734717030762650977610843892782200314, 194302382035838480868056691518001661983, 338808186336711391633114635204095158276, 21375678321071360670996372707503016501, 168472426177652439100634614409625197242, 1462358493102090614667651442213947617, 90218693639687082974300507178753912409, 225514635395706632005957139452566499092, 231569853000941406706695246795073992771, 271834385111003239258526033947890368798, 106693488365659141136778209045653397257, 162561070464624865503065416029695998471, 44398956015610064320199609514798511407, 29108668665103322432716944627248695170, 167891960748939058200216900214501853400, 120842364722163162134478912850429227633, 172075610277349817724047154545483007980, 94172514523913069869636989868016239093, 281583239418668789729906799480237070145, 197721332608777229008054983261470808613, 221850921412173493045162033331028374031, 14303058651980721967218933944804615828, 312326571132621066331385539846972615912, 35013223594216706559585327094143271399, 203696706546421500499759231044020573224, 292853331893538464913401967340261118273, 195692132451418130941495323015541758813, 258961652064639217617158487737301067218, 10524929548193611966412429591327157671, 276865773947417961986363246706329251180, 248039141014037422221556307036743522719, 310462020765511145035405976995523886499, 278843378178439666502401983127894889839, 282847833422989594045135818180635335940, 280198188469692914404571951538373950431, 20310181468820744233035955182111450193, 283113187891004197956815128559469620586, 246553070824055552037977012402914082379, 246627085352652924318186233951863342683, 322424544353049421924480326479605317290, 53028820968413711906982461285915800455, 56563855542494116716098640799667163285, 285976022406916179809984909565255282153, 182991846353081255143773699413187444858, 104972085654222026055482956392990140913, 22760532808565243138622501079546862527, 53609231418065306011319471766219292504, 21492869829761125519123982004859444080, 17760061525442824839804882725374635636, 184166334467261673309545457253676709848, 253008511743202692162450201476876395744, 54100925102034401781132891995634642590, 32737515901464936341116540713865534848, 27349532301462161333576290903991317635, 43755025222747318601942883303245171542, 40036525838387272585037204394158305658, 132528367493868975242636326362329300221, 316824845779624442406541184209798352097, 169418849181883344586544163221818356366, 13713466001066463446942064687937792228, 115111801218226916332440776793685717611, 236321668779691937240254859351546737611, 313690547376145123915240088049703220902, 107363809916842123098031031871831437194, 204999480708260199888939530121145479918, 306378500872967121205746121412141935128, 83603772899983133303558256835492803994, 144673755644188948409979110557976399308, 138263444606954538821529827760329375809, 301344177370048940317470710113808822080, 260962269437439276089152727011505668418, 234390928226953703360807175519137825378, 339471005213414559259958322605345042533, 24351608477878820095691424214168985498, 314601806789397729566082413215827181597, 330915891488352024545631550910279359153, 230970577518246012959099016768848837471, 211607085277417844098852426599808301314, 73317520199115403770548663681765454378, 206326491534079858861464048703438366608, 233551266937800229572885426282043787570, 272737383369072470894733671910486912160, 22992936559218497694959603264652341467, 227568301495598533274021693415512819695, 103846892790439438085991901699338364271, 287544138450124110155495879754610247319, 313148047611808327901613474092370796468, 248738654610064657967744112610881231261, 256830625519998119202252093648933523490, 130474694326846884912144602635697953647, 65797231524491536476109174597475062606, 83082107733307931521887211911839985320, 191222299957887614525929043697731596223, 161042684094947348415534626341085769557, 202072102448841959747591814074785809555, 250985653789443858415136175022015946217, 289506896119341041103495864563209590954, 326540405913714016871912379437345143420, 217679350408269218276997092609161905829, 122784326356914366134382513512184485844, 102049175898426708784190990704814135891, 209468513595872783935246968897058006324, 42044020389095860519777614890970181563, 121948708772247264250193756337054486886, 60053837301266217276748274363713148427, 254065100006203023428253524350910739824, 59397492045900144013180939370744168016, 271432129147924014653075560624280941149, 12207315124056955322602928488735372461, 320837279203112424685548459684785843476, 26384477908852324007838280384798436465, 68709297594091959530488974322976028713, 261120941994541284427462176415989676859, 126772591179259287818187381605544117637, 304890299811831813661392454800720055539, 179882082628802583283994601746567577335, 255412216037852743580789243320988572922, 70403601837210562193281460378323700626, 26912178933016509830221060331018867231, 153618092915830130378614286986024111593, 304600177495388354081508265830994390205, 274828745012597571881043883790462766331, 195485042166282845926162591540529520394, 211931117003124952700102738500151265214, 145038153235299958279771754198540153168, 79477365789822301943114992555286879645, 200091384594900545656418890805761155640, 244822045983988701660390083290431811658, 17391647815799182776266311162198135044, 235536434447816953419736163671931544658, 147972652126289561920072063870563446709, 310476402072035308735713050275618078400, 302170236977829183536976273050409999504, 312376661792139927380606545333078290858, 305812134945657658174083560661200383029, 85045736854130517197471296973748888640, 9782652733885899699853326979099016183, 301507573844087197222140729269042362278, 209458828451105877452564852455114661765, 256653248578705720066474415809823988149, 39829587683800112649935650576015528954, 166797410401349803144516961604152644674, 318036953545704065449517220400401783872, 266062035091721452146809012360216552667, 167968962340009224403531102025737333029, 56213107813719947425108150991749972280, 31355610562765170084110904735177274507, 250587194634027035274468670703876929615, 149155993415685751577977801077966042571, 171711718098651412759609141137211341926, 308299905624308670070041337758407152661, 220085972708559658702877904936881777595, 331195180488046986057984501603420618160, 281257849879744192337292006631112418921, 206820005730628889988020787550416337509, 146248038007212244336353962212707993240, 251322510146450319239729715986189281693, 123551191257334543587599283460423913700, 286630059600663035009333484062616970711, 228183553882228179796318196656842465793, 312276704165575398776867804209575617179, 279934203021107435611159003596665755451, 225871516816964602982873772325474284505, 331391060384300778772662960194874150430, 48932328145484089118463138683940169818, 93400170965141509837461729936854134221, 60972013655833924994455587951980585138, 26200306758944890778996473322139941369, 34156226086494590235055120239337079095, 299134913796918623676208022570137454086, 1946917870417395838944516132847937692, 12893996391655652847356681375951728788, 328675780344371091855022578577246841265, 40880258751538999964201527385998497480, 138644479978489945207913416449976201825, 80968752923777819283104948331235320918, 46279181212154191211520852907378202828, 55052611871831036161646918391383298188, 269676967732659391544582000694055921939, 225000814986427189078640460173371180286, 203501364154456769738352351394945141514, 322128768954211388025096848110718968524, 203839884627111153339487682905459137780, 292109851558462861817382103146645309797, 259840634232292905238482391829603121914, 33698557557396000509745572966453187799, 148674237891656889591241745411787121131, 285633860240567203700530843599370217632, 133102778203437562228558437053222500354, 225219927403269954095691936196440832605, 222808060162104305240592921619844097727, 315039090378382702415456310011211528950, 141938898329054567669597505647103901574, 5517056786791800743230094287498092196, 199099025633580752301961587988083073368, 114234067467237365084708614047916066407, 315334206317128663038330684505405161022, 185295331262221200276880516459404157035, 282960454261658053640413700221264993298, 152634372905517614074132296645811075083, 233565649386419648277129405935480731401, 220463599663255686133423900706259411329, 69218574291235302577798434661483865579, 238987673084647336250499497266374586214, 232485040518882022125964999714755362202, 4499326807165319365018462139089758486, 162891538149638991721291303064768183333, 331444472716284245462082023035922279942, 269253423753763801433933422523388921562, 293253244462039113973810021484197109329, 274544712125624589395151959079147296, 230351079434313121159181251379117165682, 183179551007883050023075206933579681129, 73041050404835327941119764447740790009, 95673745622803662611543931565232699735, 28371233186241793530484641094793113025, 127449176809953298030010661164136458997, 243627143349528537830697429941559506952, 299178892959634662971108351060302914192, 177994145780732570813803546629177296282, 95055176726462149716939284534802995930, 253457878578007622075568816511167749632, 69051031049041497349804136885488989990, 29630404106374137456807319062643122399, 198557528344028091003652944354790976811, 327600672513793185653468942908552928951, 84153187340804397303809897094244254568, 136523007350702106338812990106584087157, 329915654143008106237102235761058800904, 296298133920940105629219931712370011180, 43721538449877333848879029552984863883, 222134248856953219984845616603399059617, 10587054422071412276173735376982673573, 146903960368910742729626703091217708803, 8195950838507706104544986949602963638, 225437490720130782470552373400069523296, 256740893056871466720420336055327239977, 145395336538804919178179372673477557315, 319233889619359356268552653264987890041, 152011033677858981325937428985483572292, 222156280549417307922762302854504285675, 45096435560018572005877175973544537165, 4676873751403656430596701171907507832, 241473046185150468614046690267795522183, 200085964066601226931687872352819200672, 140742110259575352622414775425367456241, 201983988276129406356434871781850198001, 245159900899530575377556854218087434656, 223972185272216556295696437015206311857, 330676634706273703831882267551461595505, 86403019421346171691680739369657792505, 243637580956373971686791652802328360906, 43190746558049902863832053624922919445, 94315696040983985898814079860684146772, 17951728305682859932022609641378283108, 15707550629186620069698036602062620605, 37811925446833665898929242580623429305, 310308071700987013568677663406523382321, 136917076471511089848524867294566429563, 139752697113356872762109325577670826894, 278983153556156963874973127587740166368, 17594471535015928197531981006965132756, 319700835058234959185804110431850141401, 117562380692084024835257044020398844868, 181813242414098736429044165618578283762, 233808100525109876298084983440560923097, 208905506396585800540350812627742058640, 60106592156650636694622654436405472591, 123656914197215971686780434171655357481, 107298825213779413057596782713172570712, 27840262224470300065155555648865608718, 264313732936786296296852453540779343685, 39943583671046428700005192155199219996, 254468115632956080592653642592759946688, 38109043020643154041803815808649094489, 291276506489959096698640909873064706439, 142190394403639681745884867998221144627, 90502350756979526538931693714891341934, 115488274002643143725394840373699984135, 251111526977940923156502202966876871442, 202614660808604367741489962610637230594, 49644286549565107098218678655370596122, 231708264807951243976893591095029016680, 277918313367662431318354177497956813450, 192448982651771397205038556778547952806, 329773254883813130958401103277835735733, 206011978739256217977609543977187279169, 190416364119432182381392065318373297825, 186568699082725374286007932108897809697, 10173144665102745441500065856481909394, 89335439688343823194184537451483810790, 5633550378019222826413885720281892894, 6433618733595621544567999584897707798, 317833171476725513742235672788858900753, 10660516010968513926508282938316964663, 228904162851696447353706310125003495462, 103946182076666183580994420554982178257, 323764892226741813685442526196880457830, 232704240307671050682289545099869945674, 158221385730909088017284990955106565341, 21046755792531638236472023795843055089, 92009528757743011337675909946812533159, 54360799786789778593749555391908818980, 308511599268513613184626575277090975138, 294588524030944888335408994823443487214, 101974242965438030075387412320256588521, 36852944317023716587622058088531386064, 243461393967654338097116815515760417830, 72829179821383120787530017420352288154, 264434213855610606473415620932196128611, 114135076255016748238232403179495201474, 7686440992360320992888175839408883050, 334721037770738139879384494416867312314, 141808630319210356803116981485419335224, 245554672647405783347093642335227054278, 1263858062026623556514213501105560753, 117430206102691026486087972587096661865, 275979746027970029559737112417662686666, 104776578036891809082436523359543415545, 221002697083179093566556260320616203769, 44368147308166679494439198344015345118, 74284879537902728680008657855936891792, 270474648477985983106956780596458205863, 134437876112458273418034487991426425121, 246559398493538599346948667358167875724, 138782706243032191718577842062069399703, 162770733536086033677330669442220596456, 80734221329124945657794343063248112296, 12087570942502397129067359822720262923, 52986929428886398992679117813589841301, 76305142226871252516878592263805154191, 249182596276252432578941573787520636206, 288865011528525714542403854887014217410, 108300383746963569964137704103803151261, 67816936869494288066683869981341381529, 85849980059867342372335648783532024504, 203432838733409856260647809323052431003, 7571400274441017543578753402117173630, 36847982731869624433561832992931260220, 41659582222310844996967690071407289018, 98038720452241625310184071972490542838, 288979665272855217067417953827137182710, 12628865669761579849708368074118872052, 323577133864032334920813930656482254317, 165990085887733751554426604418408794465, 251404574051408708263484612434154503098, 48954142402696093282201483488583861381, 124617589860231498412464236457614656163, 110468278485954472587563264024327166294, 213567628081653415057696678106250362556, 94160305438134521292687275185707357064, 311693691608226496989220000715805074591, 174448367332183680412640714285293954421, 328665030403801883797124455165946330884, 339674865726679594443007411624371497214, 54909956793092175911068872335802075526, 318216111579284626620319694771225244670, 306746415862772897670900532384134361888, 88093646016603015001127737487608600766, 41584545131943793563977334245693866415, 79569587795303743873716129611669815711, 254766013663961035953773944454176888912, 14248714523327538649402482122911599135, 19645635698108827172726766782599876609, 76301426500447850447401555021768783981, 246360875981492317317943355090569421787, 251320067256797963768223376873049075157, 64040904656053390791510949287334412990, 131811508334582246917594562930870904723, 90585875433237055579180550473342017815, 192592184606284563788424532416023999848, 163530580588538159396036807275383604441, 262167553445281162489966000352760659185, 296777519124276944783647631852433238128, 236219906528348511918016188567275957495, 52808252512451090740916270198279850601, 317988059853071247151278667604429062574, 1468394570308419466740760349324351850, 182416425472960595922613698441990678518, 119940557892017913035859296434719718541, 173493466719202519389415787844329664262, 141689112621578579003977748532502684290, 47414274876690234598294039140601114223, 270486842464278607842524113418320870831, 167185772129925016253569563521631480248, 75128815017241911852363877688908582470, 181518318963305920347143628791045326423, 312522690878317635689774155566087557006, 198764953582244732584404327173422430471, 39189503135911720305761429040456980750, 20323545227181687465026712529822018305, 102185317544666986108008701689245495864, 92501600516279165071436753267130736348, 180845064413671223094798040771164257647, 225999079686752275740357971814972248907, 174001712489754928138327898168300603598, 281146475964651252982857229962618976404, 67384382853745910236083980683377219905, 185223232535969670971357236010125764447, 309508527676779586603453402937981146389, 153462707449959123905914709949923863492, 37573573026392503985543194471934659385, 173400357151075349363812097894648640554, 55141917229967995765695497488163035656, 55681033916334277251955489364208846594, 291531994631686317784179160117638381628, 79946966673052759376072647623444881571, 287786154201166861748939633333718990767, 260249739346295270446613347704653478260, 273630998028860666317122793197165031419, 24571430244279721031232287136547013913, 246337039242255682016490943646053019658, 274324073033097700840816307759455924010, 73124794377410104216204379384667641732, 299187822431115111748969579860117777262, 168868521490585065608638685852611017153, 289680644412376363293290161641991647404, 280058682052696689685124893692845114870, 58386864453053362977428920644201909758, 312747181709124034193621292216104074769, 65363909828656880043329220390610995601, 249221991880072766853017596278989405005, 8042351737203956352851776206530928830, 205129686383377076399590014269593035688, 312573655579766383860265459878415867794, 60821879127671185031929739720860009920, 209704306277622218196286905565843715720, 318913838662594379799193246071789633909, 37983107036211050726240798711488021281, 44254674397396545176973342438605939927, 50952529494986694600027429917216368280, 90602282322543963023389797175595675564, 262376228469135063375650040363389340390, 182914739552482864419472844024234766425, 241315572252178335638270919596625672093, 137587739388662600386542807242962053135, 5104311189658877698474158419433526280, 149183902795699754901941082367104938790, 70332647863205007782364589810113774403, 124696318974399237067990140563963956244, 112360174152471539373537494985340207638, 308179012176564151132399812170279314738, 87452454357251852616730823594216860206, 270256509622929807237953738467413028449, 268603381737928358169507247742309458571, 155295643030507223202917927699702988404, 68513589178339424277477861643193198798, 270673485712407364601813023733416625097, 320970927366691563837866873920552600754, 195536984977332775212006442654371220753, 268745869352123288184251617940598077968, 115387548533918964819953805778937968788, 316560144291516329933713325181511505742, 209374112430875771256904881103523627639, 23062932246355430124837912208834360519, 105287516898786268664798468333531401084, 153551154614112570989098759714569226016, 328477086998092431735078830435591877975, 323040266282643585010089028310738373033, 180671360257725661806239843544409637430, 152085198372080475113821332422241812295, 118168259511011053961491995124020936101, 125322149062408989917757084359722072718, 245575097027692994276690478855214213002, 151627386724763004775010438875844664029, 125392482969366045912088633888578041221, 32212063972981656586541097559944567361, 679784624754167049472306238938869447, 14831169872897429315990958603621371625, 185551085657391358564649189969267745963, 196590903890276442676148460264114828842, 2816438205126485610650273005855525119, 26216022673691623599221036478513087536, 91393538160650376389375066483352433719, 334086246158317008463943943146134445060, 239624385652325184034836875737193605993, 295408667571902781894258322898658718105, 287813032902173127812314900780411549597, 307935652986243265169808889573603343739, 144298757837391225778638146767312961151, 51533092119806658910404151945202818423, 309550584990878899189673382216392339441, 118501602410685637939664577403510835627, 277783795712557342504308652388664638029, 6679469834501368008916100031208995934, 13228192465329141951602647974025644533, 92817158511385429214927089849215479739, 258628628485074448347661784339435958079, 106793525514245859774576194190809910425, 24674638615529509324361291729200504036, 257362474731017609254063151724325017536, 5299582927424184632872308239524150597, 171987136216245906310665750607972695859, 152186275065328842391883845965463580165, 170948866754561699028081049027534225919, 252490922101975996376830600858003030548, 3561823463633744709805532852788482479, 47489342451261854735335956835591935025, 226447057604390290260140675893065802500, 194989061111146956714133355011739312276, 182576277785566079537425422432518703305, 48110768184337866200835673275351248455, 169659839900999390901191114118019414472, 86218168605261303923187551203722986541, 122458141826528354415214025723155264882, 7413654917311281293741957251430547498, 89160617920695398841157653201551044718, 141634191992545967962742354813388375660, 73826031426475768572357755583929973108, 152857886149918180845058175296096826233, 323879883695768669102767205683082431045, 338725632399809688564575515422365274827, 319533307035965098336788577821434758289, 78682079541375796945238387929213062482, 265341411961296261079966209924341352612, 93846509815557123676956457738805657049, 200585691768607156010865398296306658126, 225340170160574200416793005426857466740, 74265737227158625757151169902637844798, 298895821996599964336850237654560727936, 336073315713500341155457180146139490501, 340048616993562937895864607616104658119, 147627051280419046715113201320729763054, 153388675163963010907694781974376451777, 266171600278819217668630408264434901991, 89342871673873578836752302916139406450, 249470111156886510767957561590215265637, 139862874400732709323261971846039947238, 279962268702461300807061552193951862142, 236946825040390494286167442391609171530, 251290537491147894265915516109681528521, 90180500865090356380223239111576656997, 163277477057898340796804923790839978241, 170304023677303558184789805351342040716, 216398869175735345817972934682450060268, 107336614303973960122151617965237125129, 30815187189029076192580435789622290558, 190702097415932571883182472204281449358, 242680797433697658587626950379941046940, 191337904823018420303149891416809002329, 215274744360806410110919035017515955221, 107487428047719681964466090651014425227, 278263898246808316475880140898933914065, 80871533317629428028374612689395750947, 330211387375183387126405300761725224351, 18627783217081219871594283146241332289, 8075027683876107181590160061437837551, 248328932998478592542951094339168900240, 158447278359952099811338660992152391919, 32548446677319027183195890009104373328, 108106623087544397150385492222134817161, 331153045491898526958647794473037136697, 4312066289956273585692105885039361734, 64554507655502023112353851914847327436, 154954828219960713692085995190045069115, 185986107158946355608742270534547072616, 190501487897961892545045362417871663588, 75465663299020494383584413384713905134, 229196695130812788581550012798128302366, 65210662608804000155049909077763296812, 153854074678343331382463257612719429625, 248594691937151641352219686219655097479, 63090476472953802918968842419799869373, 270504370970968641343304475840021421033, 114396183809419422024508581394963584147, 315000644287925099483877806760700344248, 129106422557841409047811020254072971058, 253194227122067580452848703135896476735, 147636576116397402333711065571414733740, 51036171862047809584196812048648420317, 230657077678505257599699338509202613112, 272267718883366080545976784634144245763, 233657596118671091774381039493254060550, 146903583876075595935658272741353754923, 135974433092789462087285707380437163328, 176446128122614497093410557184490181791, 205837591760770597280185429523710758893, 122771447562289213355585913786947275010, 308273844888278524729168676327928983402, 293842717192026187412584718931149072832, 233949137439653819577538034071140838606, 49988900067426916222439035908338077409, 291785053351469328130977106956158290951, 324603394266313634376531888090987550637, 57684583686520309166565055681657733235, 149269845287027710587282465757335542126, 294646524822920497825934771054275379222, 28841360469252903471673371284669795475, 150409307702114929325480683710876449132, 47055795089644966761368342147065246181, 9092135206213093618915484586773097264, 304943124509686001610538316485629013741, 279903245538340801395976875524509951487, 51130167318301353270681590091284639785, 216145125473175451325361264173028928487, 321254325376467757988757096756425925297, 306915855219623231041777120750440607397, 153027340527491607463961128487980032908, 154308435554271034944922213748108547996, 91309945684553085284171455552915035843, 328959607784858839446924983273267596031, 71030578180828330084973313776410178092, 267318161634242889573044964260958800086, 311845051879302672472358644829372271460, 337003446771042160899619298680272255475, 286472931728347624927152448001476464981, 264528996843550842674943180193619077979, 254613038481264853132538169625998385108, 8107718488077270313406050463720990701, 98605313409560217034042669121786245581, 177487410300312781656012830849247059620, 139214349962387530828647777274907970446, 27095174347538893482064517418599416226, 256632590605537951167756334522043721714, 231537582757647576088657704756161010356, 280352601829328817135158142850856597636, 314666403894234463412817140497210256524, 20506556391607729670318978513546852190, 33375423192470510237778316594870383084, 130249511161807440885641700608570789850, 323872948215981144685872074558922116608, 178874337252266038852395637652819509317, 311242827873290836892593475058591179065, 92905738564396897552442941023309977916, 281858097935469901497099893858520720790, 88198508695419044528636826835507434257, 179014462414236754415561560380054454653, 315196839504643381536492485165548809417, 62782683561151579543819944670057219724, 307347401971309329783852838255582232201, 60768189280404432530870330707486560686, 304797658545926768548543524624935625921, 256437231678178420038335767754014692272, 162383445225959630308395234346289984968, 151562236417451415917330001223408227474, 253206489240480542430487874305428663045, 55660778887511359756870046028796601527, 290833626061887516122969908835952604770, 159773390712355338412654485365617331641, 7822142630532782167731043368318754494, 165361139983522746397834059991164976281, 156983922788018440945317380826726493759, 249795791105521310922419552432830252219, 173599550184557397932325493866808859985, 269126612714425952606930662295951133300, 113977879180907769764919240026260456706, 126626705132623708457892925077184531530, 20591445176787615839205672862058320080, 206957285714415591421852905641632771288, 164236395188518993395875796419184964885, 34152858525270673987337831277945519979, 128306442138127980969303587398420525612, 133382690184985780352590651311219172776, 35743025601684917100659426136949042371, 62777842818162389206381748424347298273, 232294057763325876437127821598218437748, 86709500789065315459247632069975160435, 321818301717642099875001378838910844118, 195113807823785116822193190037949895970, 237678512200709678608917861955163544295, 326784250006718694794966660122354524175, 270514598417484679080124610570080784217, 83117291707145477722662827805258015959, 166360319640113172624166937118926370371, 43341039802879838572084619831270586117, 54917235094940246689856323125140126116, 110617335064313412629339402949664058081, 186703834794183835571980646296167325878, 88267202647213527744648927129336641467, 20302553969641858105756157446180003521, 169956112957250788318343007957789928880, 249836401130290082306078380708499222455, 292978856632302071709849988851652788843, 241683111016163235255979791331125731922, 45856310764584825743705379743024444209, 62043681471846948812467787085685730434, 238235871465596289244631338407876585309, 42210475419562575267772908924702286674, 248226180959640694501838039000782271905, 21419471332126324834776728453790026143, 316373821436461348686024975823309746037, 100013795350300002967792625251780568770, 338916729832389883220493735164565702731, 284722668878592829077416065266024318444, 88096290546724749109206111240307690302, 30685725384624017870726651331746968936, 180875968678019303795214194042799998994, 214073114016670097796098785660282260891, 217260935235207107407023178083086846249, 100611401490812945391029359320322472703, 105699663787207421615778430135413166639, 331725085586713584365295899308170277497, 99714778833410595538855959473664310330, 106001147589743957852424734244777419664, 105678168518690272110071464368211554885, 185503839527581304658568741346807558794, 258014347371101330285451036306219768982, 80887191028710242203294188109650444415, 297126807462952155466425422009996244246, 219257722337992502443239673639737764225, 310995999258309341400521628040852411820, 203906640480344411240289199719369743746, 328992280285973895337613748810200432420, 20356354894626882202130752475662918434, 52172079328544104950672272762088170228, 297488420284487941737967041171439075657, 301334803688804032483589437003678512256, 243248030052885700137951536398200491676, 120742175442026103525357263877136905448, 46601494448608224102218672325591018993, 229782052243352694588639572818827638152, 130105816946261013976762365220365330993, 195445366815394602657722858745445448288, 190289630485288553199852660749586780785, 10072402776413189943078624118833865867, 323911126143486644523707436098362101794, 155094263699694686056037209057338927217, 183663941277887510940074245234064225869, 316683835668410688294864958695509507081, 40061961405421494484954794965625830947, 148297804562297337956330058373842131334, 299524786690123494437419092346066121536, 253306790583167883709133488186485297780, 224766989062397075535795504245618469679, 260378687316353201511269174722232812955, 232758995144536958143575151381780932673, 43278628301216795934287717256079188816, 168392275972681609253660059646622402068, 225175852846873514272020546422168044735, 153204450335812499428041459599995769947, 262082239004010323897926273177508915821, 17136052010298544891785539142432513385, 200348747462211911186497449162370881967, 74221732411608545834800913991152418871, 24391499463683183092980053613218821690, 113639520617717897592973358657161773243, 72535005274878712503726298084236533988, 318014591459594541798657199570991767079, 62205673434261770212255463438666374817, 160420895734656213439339294544777550959, 185260932559247256208570606531707168705, 326970724375161503733323195586018942520, 28943244779043330729551550444633158059, 99346790586438167805047119718921327912, 187084380629329152574601297757419095311, 194745271613025604952801532728438926686, 159141249309195356841514022624972767027, 296308894417554688442254630248837714573, 114938589712373551589579437212455865312, 306455973030447018952645258297761263551, 34100923007615813656190792890521234486, 49925563199146941229556997226494851234, 174042628303648977418086990076762498054, 111640676327689272145860176225551015586, 14497109628570454041201139111264112459, 141918045523371963401377828178372964637, 75116547211260975883927707849945661291, 308022767336819731621279309269994818109, 95444329471042916110634375182572710324, 10634598990761974059811516534221587321, 203023421687990112692177340657715889108, 209047857016876023961253670413892326917, 320471141549514316318882225541615884476, 317710921486024055997049806872287272019, 313891034160858498219386407350543869477, 289472070348271404769168866243159902479, 165259503297521934719755935504442159091, 58181730105539701566219377336576284487, 315377680803088833100031708931067335065, 328919508186470482737904454137877642454, 259984203395308595999729903110964118194, 301786270598459248386552640552699581541, 78249664131773767538339288259079802572, 182735115483200782515570902862446733256, 273960202809663662588679923343243418484, 112534181662637609750355026813926192521, 8617842458631504224084843974406728354, 264485030123138017638186219867987277263, 131682251598427615196773911194299433387, 23170329002121802669100207895597697341, 19958613676747569620411006478428253801, 193209873889054444180786789293518659252, 19854883654145658288163445169688572232, 266705309697849687632323871104070459424, 88660622248066512625410131121643188114, 219632356253899368924763109947859229593, 128689758775979765049937255544422297236, 167459511405886926028412428964946309448, 267563675532811199277748886402682899169, 322527940050228596299915059453490419468, 283745291718954490687629308200762247597, 101263685517430470036295091463112097448, 7461552416225958776665227891804682807, 255759674678054595059665787005677831197, 127771849501032457568802481095209412696, 74052598578594524980628449089367146997, 158586437621204293856273339306106585325, 339788949055716741746945902318951703890, 220928443371074468605447316251825446776, 95002965650793102604034279769350632632, 77085639527340364968490752534491953629, 246085945920886674833847883874096876038, 36095413375111270736122757249709693790, 128823984768173004120613025491751714924, 142472553871214302071194724191820140745, 272681002882607596050040237434760611429, 273785312241912670447015430986102765510, 286139906747890524810209513633186028138, 258152274732313173948442200111861591692, 163897998843193545352770184077140753851, 135811407603205337252895179464961769087, 289171319252373305400309458989650546799, 283934315343819697830058194928639722828, 184698351844671865811858490152920325043, 313098854804752083507968911477224250478, 129938059409874036815717140621087142848, 19359509557594578367101407062747145873, 111755681024136860268108672937056474634, 203465178932789627905746436464274256978, 303184792397251806723091720019451464513, 306483917434919480299498940975980520228, 177045445756857557463888636493664314459, 283767643571313441391724570028458737332, 295222682650781163024122676666324236278, 29901742468720697046227725421786450767, 166331236259437989776318788341073394767, 310323398130752893110498578251274050184, 160354506158979972640254243912524117621, 264023227098493864606782712396117197462, 100209730677810542974681208135600924161, 138128046916185051686667320868122173149, 109072323289311142670038146445690403039, 336783658644927956959589608914404894398, 124016102355762130985439606259969664143, 145088189714364950733856566848125420745, 192907723012685886332499087586191745738, 238095083991220387760082309906972204727, 336211652082142797903182195673662269417, 275646462811304557578429597866458266892, 180977409465509534325754859234730137151, 68973701784942097097356297105352308722, 188636378141369134675145840708161335248, 37429426711677751499795353941248090398, 106013643436353671333880617350356692832, 99375011797348772913837080422981605629, 58753888082250829244066356029194620139, 43767018671443302242829738631752495350, 175885731540151983526726730286009613981, 233464352665264169449013617500708402264, 188436242255390094116151359783909774002, 291261615829866143720266365720158944325, 157732659793402849846545773931755438570, 204386312177475200189338138801310646318, 92637802821250096967646981235642567310, 74665611319043002720351050639687922335, 84094908487228283679552934157690648975, 67750539324900645858013301572442151218, 329104732760025407625807504207097931348, 339520082274808280179722018597496401559, 207443523884295627032743076106161542850, 277921027935247653428544861686813832874, 20287429266264972570861560831511423745, 219627515134650199061356522948411836364, 325103036195362778307668931871814858350, 73293771705006784677697602934832361969, 96232425049897179615193335578960090162, 11455641637238983639651178389723956124, 89246568667485202716999997928478244840, 7296235898128458069716433074242036953, 32127657634672400118443536958575531844, 311350616004854779382510453394155929538, 331765767328217592486532913340843034900, 18367419002305604001361779002138187815, 111692568983429231245346052624190705271, 96365153169188046975667096578984019705, 295373057779289228093512792614632844365, 142608826183955197066139871177326113989, 218904184526454065248714981077823623716, 286382684786397896539300620771013093919, 55281495316806439509532943188030282610, 196380962744299894211478905611067952511, 189924419813502393411895373155163438111, 126918278024687278432383008484217311905, 148166035556984701906612819199361709806, 95591084140522315085692144534077428417, 333220141248887642716439975125051482343, 9631775774143287204602583348877801491, 14456247128330394760639219089329943472, 257018207650535585570612733692160256208, 200376731844665597507734789887100644417, 182922843832471083750966308287539898864, 132168430663452839391973622235896902394, 69881531798035948254563165684829002288, 31700067398572308626881430543759243283, 80783543856934292910591320326117298477, 11875486274929543002060546070262744658, 278681119969250293915035442383329533405, 223732656959616857922513701718941111471, 120506070971886021653318604559531765946, 226284393053762442910787897832486267103, 318889878295657337566548476336818991724, 108925156952809095164923048645698616995, 107519434708659579182291618904614145747, 283173835951423760625062034856537943485, 64697833287122066716223534802410259821, 139828316232496933791912946780755925483, 207078389646943543470449706022955146981, 264058415458527062857331772118777608774, 147324173077750896379098562986029538282, 73719048067412364253535101784690178412, 260411476798428081951912891540277212274, 151009225707433494421085803141176463242, 88860561285875402949030975911908068437, 151326804825117636608444030176837922113, 161332494719363560210977500591431271315, 279482054285522807779670026719384573904, 326321206900004818982836000282357166645, 7385687156104170183989967829095584059, 187246459179770762817598164470524181133, 216509613657711655587915794032817362434, 145223559613123084040151678531868994376, 302493140363589879296658162039406420576, 23925980907837731389012176058238005475, 22387946857881789472949010915005534213, 113469289270262359858935862756595004180, 128530567766815959168916892872011573659, 250652708921135141365422521215489377383, 207126650374847639608127779981096804711, 26099734895092548381132164072551240013, 68569687749195390810744269668720528114, 142601143149443053430734313780477646788, 179591235448400883421808829089330019183, 292842726420490820330849489721901683239, 96203598951874385538724718407682667395, 120015872726765708780119822426026525203, 206303497270552213794392675984771670494, 207769175422230740408742900463787015653, 146277719534140449888325688084609837835, 258069648284820578172983209417330500385, 153955006383993795906267579043750651047, 183817323650966130984025935376078841165, 187617036234480661902695196009994132725, 329768422471719184683708463641419399421, 190061639718914206562397156309197262714, 333472885553149976124451726371091743021, 148753499631344691501481672714335902976, 54680831422682382876890540864011388626, 45597840283367817191942668189433590092, 108697292731175189794614242993011062085, 74710436976298867822518001026236278801, 162067029462954474013758000072722456123, 318295652370999918031829765523576400999, 23601080624872320937695261993532545906, 128189776852035060928285567921807130923, 132799995869543186710578385612452846118, 308338351449816917291555212711920548381, 320055851276777216441218906440689902271, 62530470385539227292309277933722797828, 69582615430669922150817782274899291254, 100414497399552519366731353674646246067, 93739563539916107574427723914796801231, ...] In [427]: l.sort() In [428]: l[-1] Out[428]: 340282358066129026880946537805653405206 In [429]: def run1(l): ...: return l.index(340282358066129026880946537805653405206) ...: In [430]: def run2(l): ...: return bisect.bisect(l, 340282358066129026880946537805653405206) ...: In [431]: timeit.timeit(repr(run1(l)), setup='from __main__ import run1, l', number=1) Out[431]: 4.849862307310104e-07 In [432]: timeit.timeit(repr(run1(l)), setup='from __main__ import run1, l', number=100) Out[432]: 1.2320233508944511e-06 In [433]: timeit.timeit(repr(run1(l)), setup='from __main__ import run1, l', number=1000) Out[433]: 7.741968147456646e-06 In [434]: timeit.timeit(repr(run1(l)), setup='from __main__ import run1, l', number=10000) Out[434]: 7.341301534324884e-05 In [435]: timeit.timeit(repr(run2(l)), setup='from __main__ import run2, l', number=10000) Out[435]: 7.15720234438777e-05 In [436]:
无聊做了一个整数的,感觉差不多速度,但浮点数就完全不一样了,下面上代码。
l = [random() for i in range(10**7)] In [449]: l.sort() In [450]: l[-1] Out[450]: 0.9999999538530189 In [462]: def f_run1(l): ...: return l.index(0.9999999538530189) ...: In [464]: def f_run2(l): ...: return bisect.bisect(l, 0.9999999538530189) In [458]: timeit.timeit(repr(f_run2(l)), setup='from __main__ import f_run2, l', number=1) Out[458]: 3.3492688089609146e-07 In [459]: timeit.timeit(repr(f_run1(l)), setup='from __main__ import f_run1, l', number=1) Out[459]: 5.069887265563011e-07 In [460]: f_run1 Out[460]:
速度差了一半左右,前面有一次运行要1秒多,这次少了很多,具体有空在测试了
2.9当列表不是首选时
主要讲述了数组array以及memoryviewe的使用,最后还有NUMpy和Scipyd的介绍。
In [304]: from array import array In [305]: from random import random In [306]: floats = array('d', (random() for i in range(10**7))) In [307]: floats[-1] Out[307]: 0.81302883691505 In [308]: fp = open('floats.bin', 'wb') In [309]: floats.tofile(fp) In [310]: fp.close() In [311]: floats2 = array('d') In [312]: fp = open('floats.bin', 'rb') In [313]: floats2.fromfile(fp, 10**7) In [314]: fp.close() In [315]: floats2[-1] Out[315]: 0.81302883691505 In [316]: floats == floats2 Out[316]: True In [317]:
这个是通过数组操作1000组数据,无论从速度还是数据量都比操作文本文件要快多了。
pickle.dump处理浮点数组跟array.tofile速度一样非常快。
2.9.2内存视图
具体介绍了memoryview内置类的使用。
Python memoryview() 函数返回给定参数的内存查看对象(Momory view)。
所谓内存查看对象,是指对支持缓冲区协议的数据进行包装,在不需要复制对象基础上允许Python代码访问。
In [317]: numbers = array('h', [-2, -1, 0, 1, 2]) In [318]: menv = memoryview(numbers) In [319]: menv.tolist() Out[319]: [-2, -1, 0, 1, 2] In [320]: menv[-1] Out[320]: 2 In [321]: menv_oct = menv.cast('B') In [322]: menv_oct.tolist() Out[322]: [254, 255, 255, 255, 0, 0, 1, 0, 2, 0] In [323]: numbers Out[323]: array('h', [-2, -1, 0, 1, 2]) In [324]: menv_oct[5] = 4 In [325]: numbers Out[325]: array('h', [-2, -1, 1024, 1, 2])
menoryview.cast会把同一块内存里的内容打包成一个全新的memoryview对象给你,进行内存操作后,数据直接改了。
2.9.3NumPy与SciPy
这个数据分析的两个库,SciPy是基于NumPy的另一个类,他提供了很多跟科学计算相关的算法,专为限行代数,数值积分和统计学设计。
2.9.4双向队列和其他形式的队列。
collections.deque
from collections import deque In [327]: dq = deque(range(10), maxlen=10) In [328]: dq.rotate(3) In [329]: dq Out[329]: deque([7, 8, 9, 0, 1, 2, 3, 4, 5, 6]) In [330]: dq[2:5] = [] --------------------------------------------------------------------------- TypeError Traceback (most recent call last)in ----> 1 dq[2:5] = [] TypeError: sequence index must be integer, not 'slice' In [331]: dq.appendleft(-1) In [332]: dq Out[332]: deque([-1, 7, 8, 9, 0, 1, 2, 3, 4, 5]) In [333]: dq[0] = 0 In [334]: dq Out[334]: deque([0, 7, 8, 9, 0, 1, 2, 3, 4, 5]) In [335]: dq[0]=6 In [336]: dq.rotate(-4) In [337]: dq Out[337]: deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [338]: dq.extendleft('555') In [339]: dq Out[339]: deque(['5', '5', '5', 0, 1, 2, 3, 4, 5, 6])
测试了不能切片赋值,另外的炒作比列表要方便,同时也是容器序列,里面啥都可以装。
除了collections.deque还有其他对列的实现
queuq.Queue LifoQueue 和 PriorityQueue,不同线程可以通过操作队列实现线程安全。
multiprocessing.Queue用于线程间的通讯,同时还有multiprocessing.JoinableQueue类型,让任务管理更加方便。
asynio有Queue,LifoQueue,PrioityQueue和JoinableQueue这个为异步编程里的任务管理提供了专门的遍历。
heapq跟上面的三个模块不同,没有队列类,而是提供了heappush和heappop的方法让用户可以把可变序列当做堆队列或者优先队列来使用。
In [357]: l Out[357]: [2, 4, 3, 6, 5.0, 5, 5.0] In [358]: heapq.heappop(l) Out[358]: 2 In [359]: l Out[359]: [3, 4, 5, 6, 5.0, 5.0] In [360]: heapq.heappush(l,3) In [361]: l Out[361]: [3, 4, 3, 6, 5.0, 5.0, 5] In [362]: