流畅的python,Fluent Python 第二章笔记

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]:          

你可能感兴趣的:(流畅的python,Fluent Python 第二章笔记)