亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python數據組合總結

系統 1640 0

一、序列類型(字符串,元組(),列表[])

?

序列類型支持in,len(),分片[],迭代,5種內置序列類型:bytearray,bytes,list,str,tuple(元組)。

1、元組可以嵌套(如:x=str[2][1][0][1])

2、元組的命名(collections.namedtuple(),即自定義)

?????? 樣:sale=collctions.namedtuple("sale","productid customerid date price") 逗號前的為元組類型的名稱,逗號后的參數為字符串,用空格分隔,每個名稱都代表該元組數據類型的一項,數據項如:x=sale(121,"2017-03-22",1,10.99);調用某一項則可用x.price來實現,此處結果為10.99;

?????? 對于格式化替換,可用**namedtuple._asdict()函數實現直接用名稱替換索引,如:"{productid}{price}".format(**x._asdict())。此方法用于多層元組較好,name即為最外層元組的name.

?????? 單個元素的元組需要加上逗號。

3、列表

?????? 1>列表也可存儲任意類型的數據,且可使用比較操作符(逐項進行比較)和修改列表內容。

?????? 2>列表支持元組的所有操作,同時還有以下函數:

?????? append()  追加

?????? count(x)  統計x出現的次數

?????? index(x,start,end)找x,如沒有則產生一個ValueError,

?????? extend()  ? (等同于+=),

?????? insert(i,x)  (在索引位置i處插入x),

?????? pop()    移除最后一項

?????? pop(i)    (移除i索引位置處的數據項,如沒有i值,則默認移除最后一項),

?????? remove(x)  (移除從左邊開始出現的第一個數據為x的項,如沒有則返回一個ValueError),

?????? reverse()  ? 反轉,

?????? sort()     排序。

?????? 對序列特定位置進行賦值可以對列表中單個數據進行替換修改(x[1]=2;x[1:2]=[a,b],對片進行替換時新數據項的個數不一定要等于原數據項的個數,可以是任意個數,結果都是新的分片替換已選定的分片,如果新的替換分片為空,就相當于刪除了已選定的原分片),del x[1:2]也可以起到刪除這一分片的效果(不過del其實是解除了這一數據項與變量之間的綁定)。

?????? 3>用*對序列進行拆分賦值

?????? 樣:a,*b,c=[1,2,3,4,5,6]? -> a,b,c=(1, [2, 3, 4, 5], 6)

?????? 數據項按位置依次經變量賦值,然后將剩余的所有數據都賦給帶有*號的變量。*的作用就是將一個iterable進行拆分.

?????? “*”的另一個作用是復制操作符,其效果相當于乘號,不過對象不限于數字,可以為任何對象。

?????? 4>列表內涵(用于創建一些含有大量數據的列表)

?????? [expression for item in iterable](對iterable中每個數據項進行expression操作)

?????? [expression for item in iterable if condition],對限定條件的對象進行操作。

?????? 例:leaps=[y for y in range(1900,2000) if (y%4==0 and y%100!=0)or(y%400==0)] 計算閏年。(range同樣為前閉后開)

?????? 列表內涵的多變量嵌套:

?????? 例:cods=[s+z+c for s in "MF" for z in "SMLX" for c in "BGW"

????????????? if not(s=="F" and z=="X")]相當于三層疊加的for循環.

?

二、集合類型(set)({})

?

  set支持 in ,len(),比較,位邏輯操作符;并且也是iterable的。只有可hash運算的對象才可以添加到集合中。所有內置的固定數據類型(float,frozenset,int,str,tupul...)都是可hash運算的。內置的可變數據類型(如:dict,list,set)都不是可hash運算的。

  創建一個集合可用set("a","b",3),且創建一個空集合必須用set()。集合創建時可以存在兩個相同的項,但沒意義,最終形成的集合只會保留一個。

例:s={2,"veil",("a",5),frozenset({8,4,7}),"a"}

  集合是沒索引位置區分的,也不能分片或按步距分片。集合中每個數據都是獨一無二的,所以集合常被用于刪除重復的數據項(x=list(set(x)))。

1、集合常用函數:

?????? s.add(x)  添加x到集合s中;

?????? s.clear()  清空;

?????? s.pop()  ? 移除集合中任意一項,如果為空了則返回產生KeyError異常;

?????? s.remove(x) 移除x項,如x不存在就產生KeyError異常;

?????? s.discard(x)? 如果x 存在就移除掉該項;

?????? s.copy()   淺拷貝;? *

?????? s.different(t)s-t? 返回一個新集合,其只包含s但不在集合t中;? *

?????? s.difference_update(t)s-=t? 移除每一個在集合t但不在s中的項;

?????? s.intersection(t)s&t???? 返回s和t的交集;? *

2、集合聯合操作運算符結果:

?????? s|t,合集;s&t,交集;s-t,減去與t的交集;s^t,合集減去交集。

3、集合內涵(同列表內涵)

?????? {expression for item in iterable}

?????? {expression for item in iterable if condition}

4、固定集合(frozenset())

?????? 一旦創建了就不可改變,同static,可用的函數只有那些不改變集合本身內容的函數(上已用*標注)。

?

三、映射類型(dict)

?

映射是鍵-值數據的無序組合。內置的映射類型有:dict(),collections.defaultdict();對于3.1以上的還有collections.OrderedDict(),它同dict()一樣,不過有索引序列。

映射的鍵只有可hash運算的類型才可使用,而值則可使用任意類型的數據。

1、字典的創建

d=dict(id=1948,name="washer",size=3)? #關鍵字參數

d={"id":1948,"name":"washer","size":3}?? #面值

d=dict({"id":1948,"name":"washer","size":3})??? #面值

d=dict([("id",1948),("name","washer"),("size",3)])? #序列

d=dict(zip(("id","name","size"),(1948,"washer",3)))? #序列

{}或用d=dict()來創建一個空字典

2、使用d["id"]則返回相應的值,如果此鍵不存在,則產生一個KeyError.

d["xx"]=34可添加一個項,如果此鍵已經存在,則會修改原始的值。

del d["xx"]會刪除鍵為"xx"的項,如果不存在則產生一個KeyError。

3、常用函數(全)

?????? d.clear()  清空

?????? d.copy()  淺拷貝

?????? d.pop(k,v) 返回k的值,并刪除k項,如果k不存在,就返回KeyError或者v(如v存在的話)

?????? d.popitem() 移除任意一對鍵-值,如果d為空就產生KeyError

?????? d.values()  返回字典中所有值的視圖

?????? d.keys()   返回字典所有鍵的視圖

?????? d.items()  返回字典所有(key,value)對的視圖

?????? d.get(k)   返回k的值,如果k不存在就返回None

?????? d.get(k,v)  返回k的值,如果k不存在就返回v

?????? d.setdefault(k,v) 同get(),如果k不存在就插入一個k項,值為None或者v(如果給了v)

?????? d.fromkeys(s,v) 返回一個dict,它的鍵為序列s的項,值為None或者v(如果給了v)

?????? d.update(a) 用a更新d,如果鍵已存在則更新值,如不存在則插入。a可以是dict也可以是(key,value)對的一個iterable.

for

4、對字典的迭代

?????? 對鍵:for key in d:??? print(key)

????????????? 或:for key in d.keys():?? print(key)

?????? 對值:for value in d.values():???? print(value)

?????? 對鍵-值:for key,value in d.items():??? print(key,value)

????????????? 或:for item in d.items():??? print(item[0],item[1])

5、字典鍵的視圖與項的視圖支持一些類似于集合的操作(集合處的聯合操作運算)

此可用in來查看某個鍵是否存在于dict,也可用聯合操作運算查看特定集合的鍵是否存在于dict,如下:

d={}.fromkeys("ABCD",3);? s=set("ACX"); matches=d.keys()&s? #matches=={'A','C'}

6、字典內涵

{keyexpression:valueexpression for key ,value in terable}

{keyexpression:valueexpression for key ,value in terable if condition}

例:一個字典的鍵-值反轉:inverted_d={v:k for k, v in d.items()}

7、默認字典(collectons.defaultdict())

默認字典永遠不會產生KeyError,當查詢的鍵不存在時,字典就會自動生成一個新的以此查詢鍵為鍵的項,其值為創建字典時設定的默認值。

例:words=collections.defaultdict(int),新增入此字典的默認值就會是數字0。傳入的int為工廠函數(也就是一個不帶括號、沒有參數的函數),以后可用lambda函數進行簡單設置。

8、有序字典(collctions.OrderedDict())

字典的數據項以插入的順序進行保存,如果用了一個無序的字典來進行update(),得到的結果也會變成無序的。

do=collections.OderedDict([('z',5),(3,6),(8,'a')])或者先建一個空的,再一項一項的添加。

將一個普通字典轉換成有序字典:d=collections.OderedDict(sorted(d.items()))。

?

四、組合數據的迭代與復制

1、常見迭代操作符與函數:

?????? s+t  兩個序列的連接;

?????? s*n  返回n個s序列的連接的序列;

?????? x in s  判斷是否在內,not in;

?????? all(i)  ? 如果iterable i中的每一項都評估為True,則返回True;

?????? any(i)  如果任意一項為True,則返回True;

?????? enumerate(i,start)通常用于for...in循環,提供一個(index,item)元組序列,其中的索引起始值為0或start;{相當于將一個序列i折分成單個,并給每個一個序列號,用(index,item),index為自動產生的序列號,item則依次為i每一項的值}

?????? len()   返回長度;

?????? max(i,key) 返回iterable i 中最大的項,如果給定的是key函數,就返回key(item)值最大的項;

?????? min(i,key)? 同上;

?????? range(start,stop,step) 返回一個數字迭代子,左閉右開,如果沒給start,則從0開始;

?????? reversed(i) 反轉序列;

?????? sorted(i,key,reverse)?? 排序;reverse=True時進行逆序排列。當key存在時可以設置為需要的任意函數規則,甚至可以是自己構造的函數,如key=abs以絕對值排列,key=str.lower,以str中的lower()函數規則排序。sorted()排序只適用于所有數據項都可以進行互相比較的組合類型,如果有不同的類型則會產生一個TypeError。

?????? sum(i,start)? 求和,start為可選

?????? zip(i1,...,iN)  返回元組的迭代子,使用迭代子i1到iN;i1-iN都是iterable數據組,例可參考dict的zip構造方式。只要有某個iterable中的元素用完,就終止迭代過程。

2、用a=iter(iterable結構)可以獲取一個迭代子,在每次循環時可用next(a)方法獲取下一個數據項,當結尾時會產生一個StopIteration異常。

3、組合數據類型的復制。

樣:b="sudent",a=b?? 這樣的用等號只是簡單的將b的值賦給了a,但b的值"student"在系統內并沒有被復制成2份,只是a和b都指向"student"這個值,無論是從a還是從b改變這個對象"student",另一個變量也會顯示出改變后的結果。要想復制出一個"student"的副本則可以用加上類型名:a=str(b);或者分片的方式a=b[:],因為提取分片時會產生一個副本。對于字典和集合類型則用copy()函數來實現。

?????? 以上的方法都屬于淺拷貝,因為它只會復制對象的第一層內容。如果對象中還存在可變的iterable對象,它拷貝的只是iterable對象的引用地址,如果iterable從原對象改變了,拷貝對象的iterable部分也會跟著改變。如嵌套的列表:['a',['b','c']],復制此對象['b','c']部分時只是復制的一個引用地址。 如果要對此對象進行完全的復制則需用到深拷貝,import copy;?????? a=copy.deepcopy(b)

4、位置常量命名一般方法:WATER,TREE,MONEY=range(1,4);那么這三個字符的值依次就為1,2,3


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 波多野结衣中文丝袜字幕 | 澳门四虎影院 | 国产欧美日韩综合精品一区二区 | 久久综合精品国产一区二区三区无 | 久久天天躁狠狠躁夜夜呲 | 五十路一区二区三区视频 | 国产激情视频在线 | 欧美另类高清xxxxx | 国产欧美日韩精品a在线观看高清 | 精品综合久久久久久蜜月 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 成人精品一区二区www | 手机看福利 | 国产极品嫩模大尺度福利视频 | 日韩欧美亚洲国产精品字幕久久久 | 九九视频精品全部免费播放 | 久久久久综合精品福利啪啪 | 99免费精品| 久久一区二区精品 | 精品久久中文字幕 | 爽爽影院免费观看视频 | 伊人网综合 | 成人免费视频日本 | 国产一区二区三区视频在线观看 | 免费一区二区三区免费视频 | 久久天天躁狠狠躁夜夜呲 | 久久这里有精品视频任我鲁 | 看一级特黄a大片日本片 | 午夜色影院 | 欧美在线一级毛片视频 | 精品亚洲欧美高清不卡高清 | 手机看片福利盒子久久 | 中文字幕在线看 | 日本国产精品 | 伊人久久精品成人网 | 亚洲国产日韩在线一区 | 亚洲加勒比久久88色综合一区 | 羞羞的视频网站 | 五月色婷婷六月噜噜 | 韩国欧美一级毛片免费 | 99er久久 |