第三週筆記

2021-09-14 06:59:43 字數 4030 閱讀 7747

bytes

bytes型別,不可變位元組序列.

編碼和解碼

encode(encoding=「utf-8」,errors=「strict」)–>bytes

decode(encoding=「utf-8」,errors=「strict」)–>bytes

!!! bytes型別的資料索引出的字元是int型別,如

a = b"abcde"

byte(a[1]) = int = 98

ascii碼表

ascii(american standard code for information interchange)美國資訊交換標準表

類方法 bytes.fromhex(string)例如

bytes.fromhex(65 66 67)=b"abc"

b"abc".hex=「656667」

位元組序網路傳輸用的是大端傳輸。

bytes轉int

int.from_bytes(b"abc",「big」)需要加引數指定是大端模式,小端模式。

int轉bytes

x.to_bytes(len(x),「big or little」)指定模式,大端或小端。

bytearray

類似陣列,方法和陣列一樣.

!!! bytearry型別在替換某個元素時:

bytearry[x] = int型別

bytearry[x:y] = b"符號"

線性結構

性質:可迭代,可用len()獲取長度。通過下標訪問,可索引,鍊錶索引不高效。可以切片。

學過的線性結構:

列表,元組,字串,bytes,bytearry。

返回大寫字母和小寫字母

import string

string.ascii_letters大小寫字母

string.ascii_lower小寫

ascii_upper大寫

切片 !!! 返回新的字串,原來的字串不變.

通過索引區間訪問一段線性結構資料。

sequence[start,stop] 表示返回該區間的子串行

支援負索引 start和stop為0可以省略。超過邊界就取到邊界處。

start一定要在stop左邊

[:]表示從頭到尾,等於copy,相當於淺拷貝。

la = la[:] = [2,3] la = [2,3]

[::-1]表示從尾到頭。相當於反轉

s1=[1,2,3] s1[::-1]=[3,2,1]

[頭:尾:跳的格數]

切片指定尾部的話不包括尾部。

只能從左到右!!!注意是根據索引來判斷左右,而不是根據start stop

例如「www.magedu.com」[-10:10] -10指的是m,10指的是。不包括。所以結果就是「magedu」

切片賦值

前面加型別 list[:]=可迭代物件

集合特點:無序,不重複,可變的,不可索引,可迭代

集合定義:

x= 不能為空,空代表字典

x=set(可迭代物件)

x=裡面的值必須是可雜湊型別

集合的方法:

set.add()如果集合中有該元素,什麼都不做.

set.update(*others) others必須是可迭代物件,合併元素到集合中,會去重.就地修改,返回none.可以同時寫入多個others.

set.remove()刪除元素,如果沒有,返回key鍵錯誤.

set. discard()刪除元素,.如果沒有,不報錯.

set.pop(),沒有索引.隨機彈出.

set.clear()清空集合.

set具有修改,查詢,遍歷,成員運算子(in和not in).

可hash型別:

數值型:int,float,complex

布林值:true false

字串:string,bytes

元組:tuple

空:none

以上都是不可變型別,都可以hash

集合運算:

交集用&

並集用 |

差集 ^

對稱差集,兩個集合的不同部分的集合.

symmetric_difference(other) 求兩個集合的差集.

^等同於symmetric_difference()

symmetric_difference_update(other)獲取和另乙個集合的差集並新增到該集合中.

^=同上

issubset() <= 是不是另乙個集合的子集

set1 < set2 判斷是不是真子集

issuperset()判斷超集

set1 > set2 判斷真超集

isdisjoint()判斷是否和另乙個集合有交集,沒有交集返回true

素數優化

普通求十萬以內的素數方法

# 求10萬以內的素數。

for i in range(3,100):

for j in range(2,i):

if i % 5 == 0 and i % j == 0:

break

print(x)

思考優化方法:

1,素數肯定是奇數,所以偶數可以去掉,

2,乙個素數是否有必要除以每乙個數字呢?

乙個數開平方後是兩個相同的數字,當除到這個開方數字後,被除數增加,結果會減小,會經歷已經算過的數字.所以,算到開方後的數字就可以了.

3,被除數如果是偶數,肯定不能被素數整除,所以也可以排除掉.

4,素數範圍內的合數是不是也可以不用測試呢?但是怎麼實現只除素數呢?,

如果把素數新增到乙個表中,然後除以這個表中的資料是不是就可以了.

**如下:

import datetime                  #  思考,是否有必要每個數都拿來測試.

count = 2

primenumbers = [3]

start = datetime.datetime.now()

for x in range(5,100000,2):

a = x**0.5

for i in primenumbers:

if i > a :

count += 1

break

if x % i == 0:

break

delt = (datetime.datetime.now()-start).total_seconds()

print(count,delt)

楊輝三角

楊輝三角的普通實現方法:

%%timeit

******** = # 普通方法

for i in range(20):

cur = [1]

if i == 0:

continue

per = ********[i-1]

for j in range(i-1):

# print(********)

思考:

1,該方法空間複雜度較高,能不能只開闢一次空間就得到所有楊輝三角.

利用切片知識就可以實現.

2,發現楊輝三角具有對稱性質,是不是只用算一半就可以得到整個楊輝三角,減少了時間複雜度.

%%timeit

********=[1]*20 ## 開闢一次空間,得到所有楊輝三角.

for i in range(1,21):

for j in range(i-1,1,-1):# 從後向前覆蓋 可以優化,只算到中間值.

********[j-1] = ********[j-1]+********[j-2]

# print(********[:i])

第三週筆記

1什麼是注釋 注釋是用來介紹 的功能 也可以注釋一些 讓它不執行 2編譯好的class檔案注釋是不存在的 注釋只存在源 裡 1單行注釋 後面就是注釋內容 例如 2多行注釋 多行注釋 多行注釋 例如 3文件注釋 可以生成今後使用的功能說明書 1.0有固定書寫位置 類上可以寫 屬性上可以寫 方法可以寫 ...

C 物件導向第三週筆記

類與類的關係 組合 繼承 委託 inheritance 繼承 composition 復合 decegation 委託 composition 表示has a,我體內有另外乙個東西 a擁有b,a所有的功能可以都由b完成,b或許更強大,隨便開放一些功能就可以滿足a的需要。a所佔記憶體的大小是根據b所擁...

新人入職第三週 (周記)

今天521,作為加班狗我還在公司加班,今天算是比較閒的一天吧,今天剛接第二個專案。猶記得上周四晚上,作為我第乙個專案的最後一天,由於自己是在太菜,拖累幾個同事加班到10點半。上班之後才發現,其實上學還是挺好的!上班之前,我可以在宿舍玩手機,玩電腦,手機一天充電能充三回,上班之後,手機每天回家都有一半...