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

歡迎訪問 生活随笔!

生活随笔

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

python

Python说文解字_杂谈06

發布時間:2024/4/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python说文解字_杂谈06 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?1. 序列類型的分類:

  容器類型:list、tuple,deque

  扁平序列:str、bytes、bytearray、array.array

  可變序列:list、dequte、bytearray、array

  不可變序列:str、tuple、bytes

?

2. 序列的abc繼承關系:

  魔法函數構成了協議

?

3.序列的+ +=和extend的區別:

my_list = [] my_list.append(1) my_list.append("a")from collections import abca = [1,2] # a = list() c = a + [3,4] # c = a + (3,4) # 拋異常 print(c)# 就地加 a += [3,4] a += (3,4) # 可以為任意的序列類型 a.extend((3,4)) # def __iadd__(self, values): # self.extend(values) # return self a.append((1,2,4)) print(a)

  記住:我們知道類函數的實現是通過魔法函數來實現的。其中+號表示的是同類項的相加。

  記住:+=和extend是一樣的,因此+=是通過__iadd__來實現extend的。

  記住:append表示添加的是元素位置。

  記住:不能用變量名去接收這些方法,因為沒有返回值(aa = a.extend是錯誤的)

?

4. 實現可切片的對象:

# 模式[start:end:step] r""" 其中,第一個數字start表示切片開始位置,默認是0第二個數字end表示切片截止(但不包含)位置(默認為列表長度】第三個數字step表示切片的步長(默認為1)當start為0時可以省略,當end為列表長度時可以省略。當start為1時可以生路,并且省略步長時可以同時省略最后一個冒號。另外,當step為負整數時,表示反向切片,這時start應該比end的值要大才行。 """ aList = [3,4,5,6,7,9,11,13,15,17] # 取值的操作 print(aList[::]) #返回包含原里列表中所有元素的新列表 print(aList[::-1]) #返回包含原列表中所有元素的逆序列表 print(aList[::2]) # 隔一個取一個,獲取偶數位置的元素 print(aList[1::2]) #隔一個取一個,獲取奇數位置的元素 print(aList[3:6]) # 指定切片的開始和結束位置 print(aList[0:100]) # 切片結束位置大于列表長度時,從里誒包尾部截斷 print(aList[100:]) # 切片開始位置大于列表長度時,返回空列表# 賦值的操作 aList[len(aList):] = [9] print(aList) # 在列表尾部增加元素 aList[:0] = [1,2] print(aList) # 在列表頭部插入元素 aList[3:3] = [4] print(aList) # 在列表中間位置插入元素 aList[:3] = [1,2] print(aList) #替換元素列表元素,等號兩邊的里誒包長度相同 aList[3:] = [4,5,6] print(aList) # 等號兩邊的列表長度也可以不相等 aList[::2] = [0] * 3 # 將元素賦值三份 print(aList) # 隔一個修改一個 aList[::2] = ['a','b','c'] # 隔一個修改一個 print(aList) # aList[::2] = [1,2] # 左側切片不連續,等號兩邊列表長度必須相等 aList[:3] = [] #刪除列表中前3個元素 del aList[:3] # 切片元素連續 del aList[::3] # 切片元素不連續,隔一個刪一個。 print(aList)

?

import numbers class Group:# 支持切片操作def __init__(self,group_name,company_name,staffs):self.group_name = group_nameself.company_name = company_nameself.staffs = staffsdef __reversed__(self):self.staffs.reverse()def __getitem__(self, item):cls = type(self)if isinstance(item,slice):return cls(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])elif isinstance(item,numbers.Integral):return cls(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])def __len__(self):return len(self.staffs)def __iter__(self):return iter(self.staffs)def __contains__(self, item):if item in self.staffs:return Trueelse:return Falsestaffs = ["bobby1","imooc","bobby2","bobby3"] group = Group(company_name="imooc",group_name="user",staffs=staffs) sub_group = group[:2] print(group.staffs) # sub_group1 = group[0] # print(group.staffs) # reversed(group) # for user in group: # print(user)

  記住:這是一個比較多的用魔法函數實現切片操作。

  記住:難理解的是cls = type(self),返回值:<class '__main__.Group'>,這是拿到類的對象 ,其實可以改寫成下面方式

def __getitem__(self, item):# cls = type(self)# print(type(self))if isinstance(item,slice):return Group(group_name=self.group_name,company_name=self.company_name,staffs=self.staffs[item])elif isinstance(item,numbers.Integral):return Group(group_name=self.group_name,company_name=self.company_name,staffs=[self.staffs[item]])

?

  記住:但是這里為什么要用type返回類對象呢?這是一種相對方式,為的是如果更改類名可以不用修改內部的代碼。

?

5. bisect二分迭代類型操作:

import bisect from collections import deque# 用來處理已排序的序列,始終用來維持已排序的序列,升序。 # 二分查找 inter_list = [] bisect.insort(inter_list,3) bisect.insort(inter_list,2) bisect.insort(inter_list,5) bisect.insort(inter_list,1) bisect.insort(inter_list,6)print(inter_list) # 總結: # bisect.bisect(data,1) # 作用,查找該數值將會插入的位置并返回,而不會插入,返回是會在那個數字之后插入 # 表示:num > .... 插入 a1 = bisect.bisect(inter_list,4) print(a1)# bisect_left 和 bisect_right 函數 # 該函數用入處理將會插入重復數值的情況,返回將會插入的位置 # 第一:從左邊看num>...插入位置 # 第二:從右邊看 ... < num 出入位置。 a2 = bisect.bisect_left(inter_list,2) print(a2) a3 = bisect.bisect_right(inter_list,2) print(a3)# insort 函數 insort_left 和 insort_right bisect.insort(inter_list,2) print(inter_list)

?

7.數組:

# array, deque # 數組:存儲連續的內存空間,效率非常高的。 import array # array 和list的一個重要區別,array只能存放指定的數據類型。 # array的性能比list高。my_array = array.array("i") my_array.append(1) my_array.append("abc") print(my_array)

?

  記住:我們是會用 列表,什么時候用數組

?

8. 列表推導式、生成器表達式、字典推導式、集合推導式。

# 列表生成式(列表推導式) # 1. 提取1-20之間的奇數 odd_list = [] for i in range(21):if i %2 ==1:odd_list.append(i)print(odd_list)# 列表生成式 odd_list = [i for i in range(21) if i %2 == 1 ]# 2.邏輯復雜的情況 def handle_item(item):return item * itemodd_list1 = [handle_item(i) for i in range(21) if i %2 == 1 ]# 列表生成式性能高于列表操作。

?

  記住:列表生成式不能太復雜了。要不就放棄了可讀性。另外列表生成式的操作高于列表操作。

?

# 生成器表達式: odd_list = (i for i in range(21) if i %2 == 1 ) print(type(odd_list)) # <class 'generator'> for item in odd_list:print(item)

  記住:生成器通過for循環打印出來。

odd_gen = (i for i in range(21) if i %2 == 1 )odd_list = list(odd_gen) print(odd_list)

  記住:生成器可以轉回成list再打印出來也是可以的。

?

# 字典推導式 my_dict = {"bobby1":22,"bobby2":23,"imooc":5} reversed_dict = {value:Key for Key,value in my_dict.items()} print(reversed_dict) # {22: 'bobby1', 23: 'bobby2', 5: 'imooc'}

?

?

# 集合推導式 # my_set = set(my_dict.keys()) my_set = {Key for Key,value in my_dict.items()} print(my_set) print(type(my_set)) # <class 'set'>

?

轉載于:https://www.cnblogs.com/noah0532/p/10988997.html

總結

以上是生活随笔為你收集整理的Python说文解字_杂谈06的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。