日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python内置数据结构_Python基础知识2-内置数据结构(下)

發(fā)布時間:2024/9/19 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python内置数据结构_Python基础知识2-内置数据结构(下) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

bytes、bytearray

#思考下面例子:

a = 1b=aprint(a == b)#True

print(a is b)#True

print(id(a) is id(b))#False

print(id(a) == id(b))#True

1. id():獲取的是對象在內(nèi)存中的地址2. is:比對2個變量的對象引用(對象在內(nèi)存中的地址,即id() 獲得的值)是否相同。如果相同則返回True,否則返回False。換句話說,就是比對2個變量的對象引用是否指向同一個對象。3. ==:比對2個變量指向的對象的內(nèi)容是否相同。

參考:https://segmentfault.com/q/1010000015117621

#用id(expression a) == id(expression b)來判斷兩個表達式的結(jié)果是不是同一個對象的想法是有問題的#只有你能保證對象不會被銷毀的前提下,你才能用 id 來比較兩個對象

print(id(a.__init__) == id(a.zhuangshi))#True

z =a.__init__x=a.zhuangshiprint(id(z) == id(x))#False

print(id(1)is id(1))#False

print(id(1) == id(1))#False

參考:https://www.jianshu.com/p/Rvkrdb

bytes定義

bytes操作

bytearray定義

bytearray操作

線性結(jié)構(gòu)

切片

練習(xí):

#要求m行k個元素#思路1:m行有m個元素,k不能大于m,這個需求需要保存m行的數(shù)據(jù),那么可以使用一個嵌套機構(gòu)[[],[],[]]

triangle=[]

m=5k=4

for i in range(m):#0~4#楊輝三角每行都是以1開頭

row=[1]

triangle.append(row)if i==0:continue

for j in range(1,i):

row.append(triangle[i-1][j-1]+triangle[i-1][j])

row.append(1)print(triangle)print(triangle[m-1][k-1])#上例測試效率:

#思路2:根據(jù)楊輝三角的定理:第m行的第k個數(shù)可表示為C(m-1,k-1),即為從m-1個不同的元素中取k-1個元素的組合數(shù)。

#利用c(n,r)=n!/(r!(n-r)!)

m=9k=5n= m-1r= k-1d= n-r

targets= [] #r,n-r,n

factorial=1

for i in range(1,n+1):

factorial*=iif i==r:

targets.append(factorial)if i==d:

targets.append(factorial)if i==n:

targets.append(factorial)print(targets[2]//(targets[0]*targets[1]))#上例測試效率:

練習(xí)2

#方法1,常規(guī)寫法

matrix = [[1,2,3],[4,5,6],[7,8,9]]

count=0for i inrange(len(matrix)):for j in range(i):#j

matrix[i][j]=matrix[j][i]

count+=1

print(matrix)#方法2:利用enumerate函數(shù)創(chuàng)建索引

matrix = [[1,2,3],[4,5,6],[7,8,9]]

count=0for i,row inenumerate(matrix):for j inenumerate(row):if i

matrix[i][j]=matrix[j][i]

count+=1

print(matrix)

練習(xí)3

#思路1:首先新建一個空的列表tm,掃描matrix第一行,在tm的第一列從上至下附加,然后在第二列附加,以此列推。

matrix = [[1,2],[3,4],[5,6]]

tm=[]for row inmatrix:for index,col inenumerate(row):if len(tm)

tm.append([])

tm[index].append(col)print(tm)#思路2:考慮能否一次性開辟好空間目標矩陣的內(nèi)存空間?如果能夠一次性開辟好空間目標矩陣內(nèi)存空間,那么原矩陣的元素直接移動到轉(zhuǎn)置矩陣的對稱坐標就行了#在原有矩陣上改動,牽扯到增加元素和減少元素,有些麻煩,所以,定義一個新的矩陣輸出

matrix = [[1,2,3],[4,5,6]]

tm=[[0 for col in range(len(matrix))]for row inrange(len(matrix[0]))]

count=0for i,row inenumerate(tm):for j,col inenumerate(row):

tm[i][j]=tm[j][i]

count+=1

print(matrix)print(tm)print(count)

#考慮上面兩種方法的時間效率比較:(對于大矩陣運算,方法二效率更高一些)#測試發(fā)現(xiàn),其實只要增加到4*4的矩陣,方法二的優(yōu)勢就開始了。#矩陣規(guī)模越大,先開辟空間比后append的效率高!

練習(xí)4

#思路:利用類似linux中位圖的思想來記錄當前標記數(shù)字是否重復(fù)出現(xiàn)

importrandom

nums=[]for _ in range(10):

nums.append(random.randrange(1,21))

length=len(nums)

samenums=[] #記錄相同的數(shù)字

diffnums=[] #記錄不同的數(shù)字

states=[0]*length #記錄不同的索引異同狀態(tài)

for i inrange(length):

flag= False #該狀態(tài)表示沒有重復(fù)

if states[i]==1:continue

for j in range(i+1,length):#對每一個數(shù)將其與之前的數(shù)進行比較

if states[j]==1:continue

if nums[i]==nums[j]:

flag=True

states[j]=1

ifflag:

samenums.append(nums[i])

states[i]=1

else:

diffnums.append(nums[i])print(samenums)print(diffnums)

IPython的使用

幫助

shell命令

特殊變量

魔術(shù)方法

封裝和解構(gòu)

解構(gòu)(unpack)

Python3的解構(gòu)

丟棄變量

lst=list(range(10))

_,sec,_four,*_,2tail,_=lst

#題目1

_,(*_,a),_=lst#題目2

s="JAVA_HOME=/usr/bin"name,_,path=s.partition('=')#題目3

lst = [1,9,8,5,6,7,4,3,2]for i inrange(len(lst)):

flag=Falsefor j in range(len(lst)-i-1):if(lst[j+1]

lst[j+1],lst[j]=lst[j],lst[j+1]

flag=Trueif notflag:break小結(jié):

解構(gòu),是Python提供的很好的功能,可以方便的提取復(fù)雜數(shù)據(jù)結(jié)構(gòu)的值。

配合_的使用,會更加順利。

集set

set定義初始化

初始化set的時候,里面的元素不能是可變類型,如list,bytearray等

set的元素

set增加

set刪除

注意這里的remove是根據(jù)hash值來找到元素并移除的!所以時間復(fù)雜度是O(1).

set修改、查詢

這個效率相當于用索引訪問順序結(jié)構(gòu)!時間復(fù)雜度為O(1)。

set成員運算符的比較

可以看出set集合查詢效率跟數(shù)據(jù)規(guī)模無關(guān)!

set和線性結(jié)構(gòu)

集合

集合運算

解題思路:

集合練習(xí)

#利用集合來解決

簡單選擇排序

簡單選擇排序代碼實現(xiàn)(一)

簡單選擇排序代碼實現(xiàn)(二)

#二元選擇排序(降序)#lst = [9,2,1,4,5,7,6,8,3]

lst=[1,1,1,1,1,1,1]print("原序列:",lst)

length=len(lst)

count_swap=0

count_iter=0for i in range(length//2):

maxindex=i

minindex= -i-1

#minorginindex = minindex

for j in range(i+1,length-i):#!!!

count_iter += 1

if lst[maxindex]

maxindex=j

count_swap+= 1

if lst[minindex]>lst[-j-1]:

minindex= -j-1count_swap+= 1

if lst[minindex] == lst[maxindex]:#元素相同說明已經(jīng)有序

break

if i !=maxindex:

lst[maxindex],lst[i]=lst[i],lst[maxindex]#如果minindex的索引被交換過(即剛好最大值的索引和最小值的索引交換過),則需要更新!

if i == minindex+length:

minindex=maxindexif (-i-1) != minindex or (-i-1+length) !=minindex:

lst[minindex], lst[-i-1] = lst[-i-1], lst[minindex]print("排序后:",lst)print("比較次數(shù):{0} 交換次數(shù):{1}".format(count_iter,count_swap))

使用二元排序的時候需要注意幾點:1.相比于(一元)簡單選擇排序,我們需要再添加一個變量來記錄極值的下標。2.如果兩個極值的下標索引只要有一個被交換過則我們需要注意更新另一個極值的下標索引。3.如果使用了負索引來記錄下標,則在比較判斷時我們需要注意索引不能為負。

簡單選擇排序總結(jié)

字典dict

字典dict定義初始化

#上述紅色標記才是最為常用的初始化格式

字典元素的訪問

字典的增加和修改

字典刪除

字典遍歷

字典練習(xí)

waitting...

標準庫datetime

注意:total_seconds()是屬于timedelta對象的方法!

標準庫time

Python解析式、生成器

列表解析

注意一下下列情況:

列表解析進階

輸出都是[(5,24),(6,24)]

列表解析練習(xí)

1.  [x**2 for x in range(1,11)]2.  lst=[1,4,9,16,2,5,10,15]

[lst[i]+lst[i+1] for i in range(len(lst)-1)]3.  [print("{}*{}={:<3}{}".format(j,i,i*j,'\n' if i==j else ''),end='' )for i in range(1,10) for j in range(1,i+1)]4   ["{:>04}.{}".format(i,''.join([chr(random.randint(97,123))for _ in range(10)]))for i in range(1,101)]

生成器表達式

結(jié)果會報異常:first和second都為None!

集合解析式

字典解析式

總結(jié)

內(nèi)建函數(shù)

可迭代對象

迭代器

迭代器不一定是生成器,但生成器本質(zhì)是迭代器!

字典練習(xí)

#按統(tǒng)計次數(shù)降序輸出

importrandom

random_alphatable= [''.join([chr(random.randint(97,122))for _ in range(2)])for _ in range(1,101)]

dict_count={}for i inrandom_alphatable:if i not indict_count:

dict_count[i]= 1

else:

dict_count[i]+= 1

#即按字典的value排序

res = sorted(dict_count.items(),key=lambda items:items[1],reverse=True)print(type(res))for i inres:print(i,end=" ")

總結(jié)

以上是生活随笔為你收集整理的python内置数据结构_Python基础知识2-内置数据结构(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜啪啪网 | 久热精品视频在线 | 免费 成 人 黄 色 | 欧美在线综合 | 99久久国产宗和精品1上映 | 91黄视频在线观看 | 黄色va| 青青草福利视频 | 97av视频在线 | 免费av在线网站 | av首页在线观看 | 色片网站在线观看 | 欧美亚洲精品一区二区 | 亚洲丝袜av | 男人插入女人下面的视频 | 成人免费一区二区 | 色播视频在线 | 日本精品久久 | 欧美福利网址 | 国产性爱精品视频 | 十大污视频 | 性欧美videossex精品 | 香蕉久久一区二区三区 | free性欧美hd精品4k | 在线观看免费中文字幕 | 久久亚洲精选 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美一级大片在线观看 | 福利电影一区二区 | 人妻一区二区三区免费 | 日韩1区2区3区 | 超级碰在线视频 | 亚洲国产网 | 三八激情网 | 天天视频入口 | 粉嫩久久99精品久久久久久夜 | 狠狠干狠狠干狠狠干 | 欧美性猛交xxxⅹ富婆 | 草草影院第一页 | 日韩一级片av | 夜色在线影院 | 极品久久久久久 | 亚洲视频五区 | 麻豆影视在线免费观看 | 91人妻一区二区三区蜜臀 | 国产高潮视频在线观看 | 嫩草一区二区三区 | 日本一区二区人妻 | 日本美女一区二区三区 | 色综合图片区 | 黄色成人毛片 | 国产群p视频 | 日韩黄色免费网站 | 天天鲁一鲁摸一摸爽一爽 | 激情开心站 | 亚洲性视频网站 | 综合网五月天 | 日韩免费视频观看 | 欧亚一区二区三区 | 欧美日韩高清一区二区 | 欧美精品性视频 | 国产高清自拍一区 | 国产精品第一页在线观看 | 在线免费观看 | 欧美在线播放一区二区 | 日韩一区二区在线观看视频 | 欧美精品一二三四 | 日韩精品一区二区三区中文在线 | 99视频在线观看免费 | 精品国产成人 | 五月天综合网站 | 亚洲美女自拍 | 成人免费av在线 | 国产乱码精品一区二区 | 亚洲影院在线 | 99热一区二区 | 国产欧美一区二区三区视频 | 免费av地址 | 国产在线h | 国产一区二区三区在线免费 | 免费在线观看不卡av | 色婷五月天 | 在线观看黄色免费网站 | 91成人在线播放 | 婷婷久久久 | 日韩午夜激情电影 | 日本黄色片段 | 日韩淫视频| 国产精品久久久久久亚洲色 | 中文字幕国产日韩 | 久久亚洲精品国产精品黑人v | 国产国拍精品亚洲 | 校园春色综合 | 麻豆av在线免费观看 | av免费影院| 我要色综合天天 | 女女同性被吸乳羞羞 | 亚洲久久色 | 欧美sm视频|