變量是保存存儲值的內(nèi)存位置。也就是說,當(dāng)創(chuàng)建一個變量時,可以在內(nèi)存中保留一些空間。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供神池網(wǎng)站建設(shè)、神池做網(wǎng)站、神池網(wǎng)站設(shè)計、神池網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、神池企業(yè)網(wǎng)站模板建站服務(wù),十載神池做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
基于變量的數(shù)據(jù)類型,解釋器分配內(nèi)存并決定可以存儲在保留的存儲器中的內(nèi)容。 因此,通過為變量分配不同的數(shù)據(jù)類型,可以在這些變量中存儲的數(shù)據(jù)類型為整數(shù),小數(shù)或字符等等。
將值分配給變量
在Python中,變量不需要明確的聲明類型來保留內(nèi)存空間。當(dāng)向變量分配值時,Python會自動發(fā)出聲明。 等號(=)用于為變量賦值。
=運算符左側(cè)的操作數(shù)是變量的名稱,而=運算符右側(cè)的操作數(shù)是將在存儲在變量中的值。 例如 -
#!/usr/bin/python3counter = 100 ? ? ? ? ?# 一個整型數(shù)miles ? = 999.99 ? ? ? # 一個浮點數(shù)name ? ?= "Maxsu" ? ? ? # 一個字符串site_url ?= "" # 一個字符串print (counter)print (miles)print (name)print (site_url)Python
這里,100,999.99和“Maxsu”分別是分配給counter,miles和name變量的值。執(zhí)行上面代碼將產(chǎn)生以下結(jié)果 -
100
999.99
Maxsu
多重賦值
Python允許同時為多個變量分配單個值。
例如 -
a = b = c = 1Python
這里,創(chuàng)建一個整數(shù)對象,其值為1,并且所有三個變量都分配給相同的內(nèi)存位置。還可以將多個對象分配給多個變量。 例如 -
a, b, c = 10, 20, "maxsu"Python
這里,將兩個值為10和20的整數(shù)對象分別分配給變量a和b,并將一個值為“maxsu”的字符串對象分配給變量c。
標(biāo)準(zhǔn)數(shù)據(jù)類型
存儲在內(nèi)存中的數(shù)據(jù)可以是多種類型。 例如,一個人的年齡可存儲為一個數(shù)字值,他的地址被存儲為字母數(shù)字字符串。 Python具有各種標(biāo)準(zhǔn)數(shù)據(jù)類型,用于定義可能的操作以及每個標(biāo)準(zhǔn)數(shù)據(jù)類型的存儲方法。
Python有五種標(biāo)準(zhǔn)數(shù)據(jù)類型 -
1.數(shù)字
2.字符串
3.列表
4.元組
5.字典
1.Python數(shù)字
數(shù)字?jǐn)?shù)據(jù)類型存儲數(shù)字值。當(dāng)為其分配值時,將創(chuàng)建數(shù)字對象。 例如 -
var1 = 10var2 = 20Python
可以使用del語句刪除對數(shù)字對象的引用。?del語句的語法是 -
del var1[,var2[,var3[....,varN]]]]Python
可以使用del語句刪除單個對象或多個對象。
例如 -
del vardel var_a, var_bPython
Python支持三種不同的數(shù)值類型 -
int(有符號整數(shù))
float(浮點實值)
complex(復(fù)數(shù))
Python3中的所有整數(shù)都表示為長整數(shù)。 因此,長整數(shù)沒有單獨的數(shù)字類型。
例子
以下是一些數(shù)字示例 -
int
float
complex
10 ? ?0.0 ? ?3.14j ?
100 ? ?15.20 ? ?45.j ?
-786 ? ?-21.9 ? ?9.322e-36j ?
080 ? ?32.3+e18 ? ?.876j ?
-0490 ? ?-90. ? ?-.6545+0J ?
-0x260 ? ?-32.54e100 ? ?3e+26J ?
0x69 ? ?70.2-E12 ? ?4.53e-7j ?
復(fù)數(shù)是由x + yj表示的有序?qū)Φ膶崝?shù)浮點數(shù)組成,其中x和y是實數(shù),j是虛數(shù)單位。
2.Python字符串
Python中的字符串被標(biāo)識為在引號中表示的連續(xù)字符集。Python允許雙引號或雙引號。 可以使用片段運算符([]和[:])來獲取字符串的子集(子字符串),其索引從字符串開始處的索引0開始,并且以-1表示字符串中的最后一個字符。
加號(+)是字符串連接運算符,星號(*)是重復(fù)運算符。例如 -
#!/usr/bin/python3#coding=utf-8# save file: variable_types_str1.pystr = 'yiibai.com'print ('str = ', str) ? ? ? ? ?# Prints complete stringprint ('str[0] = ',str[0]) ? ? ? # Prints first character of the stringprint ('str[2:5] = ',str[2:5]) ? ? # Prints characters starting from 3rd to 5thprint ('str[2:] = ',str[2:]) ? ? ?# Prints string starting from 3rd characterprint ('str[-1] = ',str[-1]) ? ? ?# 最后一個字符,結(jié)果為:'!'print ('str * 2 = ',str * 2) ? ? ?# Prints string two timesprint ('str + "TEST" = ',str + "TEST") # Prints concatenated stringPython
將上面代碼保存到?variable_types_str1.py?文件中,執(zhí)行將產(chǎn)生以下結(jié)果 -
F:\worksp\pythonpython variable_types_str1.py
str = ?yiibai.com
str[0] = ?y
str[2:5] = ?iba
str[2:] = ?ibai.com
str[-1] = ?m
str * 2 = ?yiibai.comyiibai.com
str + "TEST" = ?yiibai.comTEST
F:\worksp\pythonShell
2.Python列表
列表是Python復(fù)合數(shù)據(jù)類型中最多功能的。 一個列表包含用逗號分隔并括在方括號([])中的項目。在某種程度上,列表類似于C語言中的數(shù)組。它們之間的區(qū)別之一是Python列表的所有項可以是不同的數(shù)據(jù)類型,而C語言中的數(shù)組只能是同種類型。
存儲在列表中的值可以使用切片運算符([]和[])來訪問,索引從列表開頭的0開始,并且以-1表示列表中的最后一個項目。 加號(+)是列表連接運算符,星號(*)是重復(fù)運算符。例如 -
#!/usr/bin/python3#coding=utf-8# save file: variable_types_str1.pylist = [ 'yes', 'no', 786 , 2.23, 'minsu', 70.2 ]tinylist = [100, 'maxsu']print ('list = ', list) ? ? ? ? ?# Prints complete listprint ('list[0] = ',list[0]) ? ? ? # Prints first element of the listprint ('list[1:3] = ',list[1:3]) ? ? # Prints elements starting from 2nd till 3rd print ('list[2:] = ',list[2:]) ? ? ?# Prints elements starting from 3rd elementprint ('list[-3:-1] = ',list[-3:-1]) ? ?print ('tinylist * 2 = ',tinylist * 2) ?# Prints list two timesprint ('list + tinylist = ', list + tinylist) # Prints concatenated listsPython
將上面代碼保存到?variable_types_str1.py?文件中,執(zhí)行將產(chǎn)生以下結(jié)果 -
F:\worksp\pythonpython variable_types_list.py
list = ?['yes', 'no', 786, 2.23, 'minsu', 70.2]
list[0] = ?yes
list[1:3] = ?['no', 786]
list[2:] = ?[786, 2.23, 'minsu', 70.2]
list[-3:-1] = ?[2.23, 'minsu']
tinylist * 2 = ?[100, 'maxsu', 100, 'maxsu']
list + tinylist = ?['yes', 'no', 786, 2.23, 'minsu', 70.2, 100, 'maxsu']
F:\worksp\pythonShell
3.Python元組
元組是與列表非常類似的另一個序列數(shù)據(jù)類型。元組是由多個值以逗號分隔。然而,與列表不同,元組被括在小括號內(nèi)(())。
列表和元組之間的主要區(qū)別是 - 列表括在括號([])中,列表中的元素和大小可以更改,而元組括在括號(())中,無法更新。元組可以被認(rèn)為是只讀列表。 例如 -
#!/usr/bin/python3#coding=utf-8# save file : variable_types_tuple.pytuple = ( 'maxsu', 786 , 2.23, 'yiibai', 70.2 ?)tinytuple = (999.0, 'maxsu')# tuple[1] = 'new item value' 不能這樣賦值print ('tuple = ', tuple) ? ? ? ? ? # Prints complete tupleprint ('tuple[0] = ', tuple[0]) ? ? ? ?# Prints first element of the tupleprint ('tuple[1:3] = ', tuple[1:3]) ? ? ?# Prints elements starting from 2nd till 3rd print ('tuple[-3:-1] = ', tuple[-3:-1]) ? ? ? # 輸出結(jié)果是什么?print ('tuple[2:] = ', tuple[2:]) ? ? ? # Prints elements starting from 3rd elementprint ('tinytuple * 2 = ',tinytuple * 2) ? # Prints tuple two timesprint ('tuple + tinytuple = ', tuple + tinytuple) # Prints concatenated tuplePython
將上面代碼保存到?variable_types_tuple.py?文件中,執(zhí)行將產(chǎn)生以下結(jié)果 -
F:\worksp\pythonpython variable_types_tuple.py
tuple = ?('maxsu', 786, 2.23, 'yiibai', 70.2)
tuple[0] = ?maxsu
tuple[1:3] = ?(786, 2.23)
tuple[-3:-1] = ?(2.23, 'yiibai')
tuple[2:] = ?(2.23, 'yiibai', 70.2)
tinytuple * 2 = ?(999.0, 'maxsu', 999.0, 'maxsu')
tuple + tinytuple = ?('maxsu', 786, 2.23, 'yiibai', 70.2, 999.0, 'maxsu')
F:\worksp\pythonShell
以下代碼對于元組無效,因為嘗試更新元組,但是元組是不允許更新的。類似的情況可能與列表 -
#!/usr/bin/python3tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 ?)list = [ 'abcd', 786 , 2.23, 'john', 70.2 ?]tuple[2] = 1000 ? ?# 無法更新值,程序出錯list[2] = 1000 ? ? # 有效的更新,合法Python
Python字典
Python的字典是一種哈希表類型。它們像Perl中發(fā)現(xiàn)的關(guān)聯(lián)數(shù)組或散列一樣工作,由鍵值對組成。字典鍵幾乎可以是任何Python數(shù)據(jù)類型,但通常為了方便使用數(shù)字或字符串。另一方面,值可以是任意任意的Python對象。
字典由大括號({})括起來,可以使用方括號([])分配和訪問值。例如 -
#!/usr/bin/python3#coding=utf-8# save file : variable_types_dict.pydict = {}dict['one'] = "This is one"dict[2] ? ? = "This is my"tinydict = {'name': 'maxsu', 'code' : 1024, 'dept':'IT Dev'}print ("dict['one'] = ", dict['one']) ? ? ? # Prints value for 'one' keyprint ('dict[2] = ', dict[2]) ? ? ? ? ? # Prints value for 2 keyprint ('tinydict = ', tinydict) ? ? ? ? ?# Prints complete dictionaryprint ('tinydict.keys() = ', tinydict.keys()) ? # Prints all the keysprint ('tinydict.values() = ', tinydict.values()) # Prints all the valuesPython
將上面代碼保存到?variable_types_dict.py?文件中,執(zhí)行將產(chǎn)生以下結(jié)果 -
F:\worksp\pythonpython variable_types_dict.py
dict['one'] = ?This is one
dict[2] = ?This is my
tinydict = ?{'name': 'maxsu', 'code': 1024, 'dept': 'IT Dev'}
tinydict.keys() = ?dict_keys(['name', 'code', 'dept'])
tinydict.values() = ?dict_values(['maxsu', 1024, 'IT Dev'])Shell
字典中的元素沒有順序的概念。但是說這些元素是“亂序”是不正確的; 它們是無序的。
數(shù)據(jù)類型轉(zhuǎn)換
有時,可能需要在內(nèi)置類型之間執(zhí)行轉(zhuǎn)換。要在類型之間進行轉(zhuǎn)換,只需使用類型名稱作為函數(shù)即可。
有以下幾種內(nèi)置函數(shù)用于執(zhí)行從一種數(shù)據(jù)類型到另一種數(shù)據(jù)類型的轉(zhuǎn)換。這些函數(shù)返回一個表示轉(zhuǎn)換值的新對象。它們分別如下所示 -
編號
函數(shù)
描述
1 ? ?int(x [,base]) ? ?將x轉(zhuǎn)換為整數(shù)。如果x是字符串,則要base指定基數(shù)。 ?
2 ? ?float(x) ? ?將x轉(zhuǎn)換為浮點數(shù)。 ?
3 ? ?complex(real [,imag]) ? ?創(chuàng)建一個復(fù)數(shù)。 ?
4 ? ?str(x) ? ?將對象x轉(zhuǎn)換為字符串表示形式。 ?
5 ? ?repr(x) ? ?將對象x轉(zhuǎn)換為表達式字符串。 ?
6 ? ?eval(str) ? ?評估求值一個字符串并返回一個對象。 ?
7 ? ?tuple(s) ? ?將s轉(zhuǎn)換為元組。 ?
8 ? ?list(s) ? ?將s轉(zhuǎn)換為列表。 ?
9 ? ?set(s) ? ?將s轉(zhuǎn)換為集合。 ?
10 ? ?dict(d) ? ?創(chuàng)建一個字典,d必須是(key,value)元組的序列 ?
11 ? ?frozenset(s) ? ?將s轉(zhuǎn)換為凍結(jié)集 ?
12 ? ?chr(x) ? ?將整數(shù)x轉(zhuǎn)換為字符 ?
13 ? ?unichr(x) ? ?將整數(shù)x轉(zhuǎn)換為Unicode字符。 ?
14 ? ?ord(x) ? ?將單個字符x轉(zhuǎn)換為其整數(shù)值。 ?
15 ? ?hex(x) ? ?將整數(shù)x轉(zhuǎn)換為十六進制字符串。 ?
16 ? ?oct(x) ? ?將整數(shù)x轉(zhuǎn)換為八進制字符串。
哈希(Hash)算法:`hash(object)`
哈希算法將一個不定長的輸入,通過散列函數(shù)變換成一個定長的輸出,即散列值。是一種信息摘要算法。對象的hash值比原對象擁有更低的內(nèi)存復(fù)雜度。
它不同于加密。哈希(hash)是將目標(biāo)文本轉(zhuǎn)換成具有相同長度的,不可逆的雜湊字符串,而加密則是將文本轉(zhuǎn)換為具有相同長度的,可逆的密文。
哈希(hash)算法是不可逆的,只能由輸入產(chǎn)生輸出,不能由輸出產(chǎn)生輸入。而加密則是可逆的。即可以從輸入產(chǎn)生輸出,也可以反過來從輸出推出輸入。
對于hash算法,不同的數(shù)據(jù)應(yīng)該生成不同的哈希值。如果兩個不同的數(shù)據(jù)經(jīng)過Hash函數(shù)計算得到的Hash值一樣。就稱為哈希碰撞(collision)。哈希碰撞無法被完全避免。只能降低發(fā)生概率。
好的hash函數(shù)會導(dǎo)致最少的hash碰撞。
*
可哈希性(hashable):
可哈希的數(shù)據(jù)類型為不可變的數(shù)據(jù)結(jié)構(gòu)(如字符串srt,元組tuple,對象集objects等)。這種數(shù)據(jù)被稱為可哈希性。
不可哈希性:
不可哈希的數(shù)據(jù)類型,為可變的數(shù)據(jù)結(jié)構(gòu)(如字典dict,列表list和集合set等)。
如果對可變的對象進行哈希處理,則每次對象更新時,都需要更新哈希表。這樣我們則需要將對象移至不同的數(shù)據(jù)集,這種操作會使花費過大。
因此設(shè)定不能對可變的對象進行hash處理。
**
**
Python3.x添加了hash算法的隨機性,以提高安全性,因此對于每個新的python調(diào)用,同樣的數(shù)據(jù)源生成的結(jié)果都將不同。
哈希方法有(MD5, SHA1, SHA256與SHA512等)。常用的有SH256與SHA512。MD5與SHA1不再常用。
- MDH5 (不常用)
- SHA1 (不常用)
- SHA256 (常用)
- SHA512 (常用)
一種局部敏感的hash算法,它產(chǎn)生的簽名在一定程度上可以表征原內(nèi)容的相似度。
可以被用來比較文本的相似度。
安裝simhash:
Pip3 install simhash
感知哈希算法(perceptual Hash Algorithm)。用于檢測圖像和視頻的差異。
安裝Imagehash:
pip3 install Imagehash
比較下面兩張圖片的Imagehash值
可以看到兩張圖片的hash值非常相似。相似的圖片可以生成相似的哈希值是Imagehash的特點。
Python中字符串是可哈希的,即可以作為字典的鍵或者HashTable的鍵使用。
您可以這樣子使用Python內(nèi)置函數(shù)hash(散列函數(shù)):
您也可以將字符串轉(zhuǎn)為一個集合:
總之,Python里面有很多內(nèi)置的hash功能性數(shù)據(jù)結(jié)構(gòu)和函數(shù)。
哈希表(Hash Table) :通過鍵 key 和一個映射函數(shù) Hash(key) 計算出對應(yīng)的值 value,把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。
哈希函數(shù)(Hash Function) :將哈希表中元素的關(guān)鍵鍵值映射為元素存儲位置的函數(shù)。
哈希沖突(Hash Collision) :不同的關(guān)鍵字通過同一個哈希函數(shù)可能得到同一哈希地址。
哈希表的兩個核心問題是: 「哈希函數(shù)的構(gòu)建」 和 「哈希沖突的解決方法」 。
常用的哈希函數(shù)方法有:直接定址法、除留余數(shù)法、平方取中法、基數(shù)轉(zhuǎn)換法、數(shù)字分析法、折疊法、隨機數(shù)法、乘積法、點積法等。
常用的哈希沖突的解決方法有兩種:開放地址法和鏈地址法。
給你一個整數(shù)數(shù)組 nums 和兩個整數(shù) k 和 t 。請你判斷是否存在 兩個不同下標(biāo) i 和 j,使得 abs(nums[i] - nums[j]) = t ,同時又滿足 abs(i - j) = k 。
如果存在則返回 true,不存在返回 false。
給定兩個數(shù)組 nums1 和 nums2 ,返回 它們的交集 。輸出結(jié)果中的每個元素一定是 唯一 的。我們可以 不考慮輸出結(jié)果的順序 。
給你兩個整數(shù)數(shù)組 nums1 和 nums2 ,請你以數(shù)組形式返回兩數(shù)組的交集。返回結(jié)果中每個元素出現(xiàn)的次數(shù),應(yīng)與元素在兩個數(shù)組中都出現(xiàn)的次數(shù)一致(如果出現(xiàn)次數(shù)不一致,則考慮取較小值)??梢圆豢紤]輸出結(jié)果的順序。
請你判斷一個 9 x 9 的數(shù)獨是否有效。只需要 根據(jù)以下規(guī)則 ,驗證已經(jīng)填入的數(shù)字是否有效即可。
數(shù)字 1-9 在每一行只能出現(xiàn)一次。
數(shù)字 1-9 在每一列只能出現(xiàn)一次。
數(shù)字 1-9 在每一個以粗實線分隔的 3x3 宮內(nèi)只能出現(xiàn)一次。(請參考示例圖)
力扣217
力扣389
力扣496
內(nèi)容參考: