Python數據類型

1.python的數據類型:python

  • 字符串
  • 整數
  • 浮點數
  • 類型轉換
  • 字符串編碼
  • 列表、元組與字典

2.應用:git

  • 序列及其通用操做
  • 相關邏輯運算

1.1字符串(Str)

1.Python中的字符串一般由單引號「'」、雙引號「"」、三個單引號或三個雙引號包圍的一串字符組成shell

2.字符串還能夠經過序號(序號從0開始)來取出其中某個字符,例如'abcde'[1]取得的值爲'b'編程

3.當字符串內含有單引號時,若是用單引號字符串就會致使沒法區分字符串內的單引號與字符串標誌的單引號,就要使用轉義字符串,若是用雙引號字符串就能夠在字符串中直接書寫單引號便可。好比:'abc"dd"ef'、"acc'd'12"。api

4.三引號字符串能夠由多行組成,單引號或雙引號字符串則不行,當須要使用大段多行的字符串行就可使用它。好比:網絡

'''
  This is a word.
  hello world.
'''

5.常見的轉義字符以下:app

  • n 換行符;
  • t 製表符(Tab);
  • r 回車(Enter);
  • \ 「」字符;
  • ' 單引號字符串中的單引號;
  • " 雙引號字符串中的雙引號。

好比如下字符串中都包含了轉義字符:socket

  

'abc\nabc'        #包含一個換行符的字符串
'abc\'2\'abc' #字符串中包含被單引號引發的2 

6.字符串的運算中「+」就是鏈接字符串;「*」就是單字符串的屢次鏈接函數

字符串操做 描述
string.capitalize() 將字符串的第一個字母大寫(返回新的值,不修改原值)
string.count() 得到字符串中某一子字符串的數目
string.find() 得到字符串中某一子字符串的起始位置,無則返回—1
string.isalnum() 檢測字符串是否只由0-9A-Za-z
string.isalpha() 檢測字符串是僅包含A-Za-z
string.isdigit() 檢測字符串是僅包含數字
string.islower() 檢測字符串是否均爲小寫字母
string.isspace() 檢測字符串中全部字符是否均爲空白字符
string.istitle() 檢測字符串中的單詞是否爲首字母大寫
string.isupper() 檢測字符串是否均爲大寫字母
string.join() 鏈接字符串
string.1ower() 將字符串所有轉換爲小寫
string.split() 分割字符串
string.swapcase() 將字符串中大寫字母轉換爲小寫,小寫字母轉換爲大寫
string.tit1e() 將字符串中的單詞首字母大寫
string.upper() 將字符串中所有字母轉換爲大寫
len(string) 獲取字符串長度

注意兩個函數:
split()函數返回以指定的字符將字符串分割成爲列表形式並返回,但並不改變原字符串,它的原型以下:編碼

split( [sep [,maxsplit]])

其參數含義以下:

sep 可選參數,指定分割的字符,默認爲空格;
maxsplit 可選參數,分割次數。

join()函數將原字符串插入參數字符串中的每兩個字符之間。若是參數字符串中只有一個字符,那麼返回參數字符串。一樣,join()不改變原字符串,只是返回一個新的字符串。

1.1.1字符串進階

  • 原始字符串表示方式及使用
  • 如何格式化字符串
  • 中文字符串的使用

1.原始字符串表示方式及使用
防止轉義字符輸入過多而使代碼閱讀性降低

print(r'abc\nabc')   
result:abc\nabc

print('abc\nabc')     
result:abc
       abc
注意:

原始字符串不得以「\」結尾。見圖3.5所示的第三行(第二個示例)及後面錯誤提示。

2.如何格式化字符串

格式化串 意義
%c 單個字符
%d 十進制整數
%o 八進制整數
%s 字符串
%x 十六進制整數,其中的字母小寫
%X 十六進制整數,其中的字母大寫
print("%d+%d=%x" %(1,89,1+89))

3.中文字符串的使用
在網絡上發送字符串時要求必須轉換爲字節串(bytes)形式,那麼就要使用字符串的encode()方法,它返回的是字節串(bytes),其形式以下:

encode(encoding='utf-8', errors= 'strict')

參數意義以下:

encoding默認編碼方式爲utf-8,也可使用gbk、gb2312等方式編碼;
errors編碼錯誤的處理方式,默認爲strict(報錯),也能夠是ignore、replace等形式。反之,若是從網絡上接收的字節串(bytes)若爲字符串,則要使用字節串(bytes)的decode()方法來進行解碼,才能看到原來的字符串,其原型以下: decode(encoding='utf-8', errors='strict') 其參數含義與前面encode()函數相同,返回的是字符串類型數據。

word="我好中意你!"
socket_word=word.encode('gb2312','strict')
print(socket_word.decode('gb2312'))

注意

解碼時的encoding要與編碼時的encoding要一致,不然不能還原或報錯。

1.2 整數(int)

  • 0o[0O]數字 表示八進制整數(例如:0O2四、0O24)
  • 0x[0X]數字 表示十六進制整數(例如:0x3F、0X3F)
  • 0b[0B]數字 表示二進制整數(例如:Obl0一、0B101)
運算符 描述
** 乘方運算符
* 乘法運算符
/ 除法運算符
// 整除運算符
% 取餘運算符
+ 加法運算符
- 減法運算符
位或
^ 位異或
& 位與
<< 左移運算
>> 右移運算

「//」運算符就是取商而丟棄餘數,好比14÷4=3……2,因此14//4=3;而「%」運算符的運算結果是餘數而丟棄商,因此14%4=2;「/」運算符的運算結果爲浮點數,即便是兩個整數相除。

|、^、&、<<、>>運算符都是位運算符,要依據其二進制形式進行運算

運算符優先級從高到低排列以下:

  • **
  • *、/、%
  • +、-
  • |、^、&、<<、>>

沒有把握的狀況下能夠運用括號。

1.3 浮點數(float)

19. 小數部分爲零,能夠不寫;
.098  整數部分爲零,能夠不寫;
-2e3 科學計數法,表示—2×103

浮點數能夠參加的運算支持表3.2中除位運算以外的運算符

1.4類型轉換

  • str(object=") 能夠將整數和浮點數轉換爲字符串,默認創建空字符串;
  • int(x, base=10) 將數字字符串或數值轉換爲整數(base表示數制);
  • float(x) 將字符串或數值轉換爲浮點數。

此外:

  • str()能夠建立一個空字符串。
  • int()也能夠創建一個默認值爲0的整數。
  • float()能夠創建一個默認值爲0.0的浮點數。

進制之間的轉換:

dec = int(input("輸入數字:"))
print("十進制數爲:", dec)
print("轉換爲二進制爲:", bin(dec))
print("轉換爲八進制爲:", oct(dec))
print("轉換爲十六進制爲:", hex(dec))

注意:

將字符串形式的數值轉換爲整數時,其中只能包含數字。

具體實現

十進制到二進制:

def dec2bin(num):
    l = []
    if num < 0:
        return '-' + dec2bin(abs(num))
    while True:
        num, remainder = divmod(num, 2)
        l.append(str(remainder))
        if num == 0:
            return ''.join(l[::-1])

十進制到八進制:

def dec2oct(num):
    l = []
    if num < 0:
        return '-' + dec2oct(abs(num))
    while True:
        num, remainder = divmod(num, 8)
        l.append(str(remainder))
        if num == 0:
            return ''.join(l[::-1])

十進制到十六進制:

base = [str(x) for x in range(10)] + [ chr(x) for x in range(ord('A'),ord('A')+6)]
def dec2hex(num):
    l = []
    if num < 0:
        return '-' + dec2hex(abs(num))
    while True:
        num,rem = divmod(num, 16)
        l.append(base[rem])
        if num == 0:
            return ''.join(l[::-1])

1.5 標誌符與賦值號

1.5.1 標誌符

1.標誌符是高級程序設計語言必須使用的用來表明數據的符號。Python語言規定標誌符只能以字母下畫線引導其後跟隨0個或多個非空格字符、下畫線或數字,而且是大小寫敏感的。它不能與Python語言的關鍵字(Python語言中已經定義過的字)相同

2.在程序設計中須要自定義變量名、函數名、類名等名稱。

1.5.2 賦值符

「=」的做用是將對象引用與內存中某對象進行綁定。若是對象已經存在,就簡單地進行綁定,以便引用右邊的對象;若對象不存在,就由「=」操做符建立對象並綁定。

x = 3        #內存中還不存在3,則在內存中建立3,並將x與之綁定。此時x引用3
y = 3        #內存已存在3,則直接將y與內存中的3進行綁定。
             #此時x與y同時綁定了內存中同一個對象3
y = x + 5    #此操做會計算右邊的值爲8,內存中不存在8,則在內存中建立8,將y綁定到它。

x = 2
y = 2
print(x is y)        #結果爲True,x和y引用同一個對象,因此結果爲True
x = 'a'              #x被從新綁定到一個字符串值上(原來綁定的是整數2)
y = 3.45             #y被從新綁定到一個浮點數值上(原來綁定的是整數2)
print('x')           #顯示x綁定的值 'a'
print('y')           #顯示y綁定的值 3.45

x = 2
y = 'a'
x + y                              #x爲整數,y爲字符串,運算時引起錯誤

1.6 Python結構數據類型

Python語言中結構數據類型有不少種,但最經常使用的主要有列表、元組和字典。

1.6.1 列表(list)

列表是以方括號「[]」包圍的數據集合,不一樣成員間以「,」(半角符號)分隔。列表中能夠包含任何數據類型,也可包含另外一個列表。列表也能夠經過序號來訪問其中的成員。

list()                         #建立一個空列表[]
  
[]                             #建立一個空列表[]
  
[1,]                           #建立一個只有一個元素的列表[1]
  
[1,2,3]                        #建立一個有三個元素的列表[1, 2, 3]
  
alist = ['a',1,'b',2.0]        #建立一個包含不一樣數據元素的列表
alist[2]                       #訪問列表alist中的第3個元素(序號爲2)'b'
  
[1,2]+ [3,4]                   #列表支持加法運算[1, 2, 3, 4]
  
[None] * 5                     #列表支持乘法運算[None, None, None, None, None]

列表的操做函數

列表操做 描述
list.append(x) 列表尾部追加成員x,x做爲一個總體添加進列表(列表作總體
list.count(x) 返回列表中的參數x出現的次數
list.extend(L) 將列表L中的元素取出來追加到原列表尾部
list.index(x) 返回參數x在列表中的序號(x不存在則報錯)
list.insert(index,object) 向列表中指定位置(index)前面插入數據(object)插入方式與append相同將對象做爲總體(列表作總體
list.pop() 刪除列表中尾部的成員並返回刪除的成員
list.remove(x) 刪除列表中的指定成員(有多個則只刪除第一個)指定成員不存在則報錯
list.reverse() 將列表中成員的順序顛倒(原列表上執行)
list.sort() 將列表中成員排序(要求其成員可排序,不然報錯)默由小到大,可使用reverse函數由大到小修改。

注意

在列表操做中並不返回列表,而只是修改列表。

1.6.2 元組(tuple)

元組能夠當作是一種特殊的列表,與列表不一樣的是元組一旦創建就不能改變。既不能改變其中的數據項,也不能添加和刪除數據項。所以,想讓一組數據不能被改變就把它們放入到一個元組中便可,而且任何企圖修改元組的操做都會發生錯誤的。(只讀的列表,能夠用列表的方式去查看)

元組的基本形式是以圓括號「()」括起來的數據元素,它也能夠經過序號來引用其中的元素。

()                              #建立空元組()
  
tuple()                         #建立空元組()
   
(1,)                            #建立只有一個元素的元組(1,)
  
2,3                             #直接用逗號隔開兩個值,能夠建立一個元組(2, 3)
  
x,y=2,3                         #右邊爲一元組,自動將元組第一個數值與x綁定,第二個與y綁定

x,y=y,x                         #交換x與y的值(本質上右邊是一個元組)

atpl = (1,2,3)
atpl [1]                        #引用元組的序號爲1的元素2

注意

創建只有一個元素的元組,元素後要有一個「,」。
  

1.6.3 字典(dict)

1 字典中每一個成員是以「鍵:值」對的形式存在的。
2 字典以大括號「{}」包圍的以「鍵:值」對方式聲明和存在的數據集合。與列表的最大不一樣在於字典是無序的,其成員位置只是象徵性的,在字典中經過鍵來訪問成員,而不能經過其位置來訪問該成員。

{}                           #創建空字典{}
  
dict()                       #創建空字典{}
  
adct = {'a':1,'b':2,'c':3.4}
 
adct['a']                    #用鍵名引用成員

adct[1]                      #試圖用序號引用字典成員,結果發生錯誤

Traceback (most recent call last):
    File "<pyshell#99>", line 1, in <module>
      adct[l]
  KeyError: 1
  
字典操做 描述
dic.clear() 清空字典
dic.copy() 複製字典
▲dic.get(k,[default]) 得到鍵k對應的值,不存在則返回default
dic.items() 得到由鍵和值組成的迭代器
dic.keys() 得到鍵的迭代器
dic.values() 得到值的迭代器
▲dic.pop(k) 刪除k:v成員對,並返回刪除key對應的值
▲dic.update(adict) 從另外一個字典更新成員(不存在就建立,存在則覆蓋)
▲dic.fromkeys(iter,value) 以列表或元組中給定的鍵創建字典,默認值爲value
dic.popitem() 從字典中刪除任一k:v項並返回它
▲dic.setdefault(k,default) 若字典中存在key值爲k的,則返回其對應的值;不然,在字典中創建一個k:default字典成員

dic.items() dict_items([('a', 1), ('b', 2), ('c', 3)])
dic.keys() dict_keys(['a', 'b', 'c'])
dic.values() dict_values([1, 2, 3])

字典例題用三種方法編程實現初始化字典{'a':1,'b':2],並設置其key爲’c’的對應值爲3。

alst=["a","b","c"]
number=[1,2,3]
dict={}.fromkeys(alst)
print(len(number))
for i in range(len(number)):
    dict[alst[i]]=number[i]
else:
    print(dict)

1.7內置常量與邏輯運算符、比較運算符

1.7.1 經常使用內置常量

None的意義正是其字面意義,即「無」,經常使用來表示沒有值的對象。
True(真)False(假)是Python的邏輯型數據。
Python中邏輯假包括False,None,0,"(空字符串),()(空元組),[](空列表){}(空字典)等,而其他任何值都視爲真。
1.7.2 Python中邏輯運算符

與(and)或(or)非(not)
1.7.3 Python中比較運算符

運算符 意義
== 相等
> 大於
< 小於
>= 大於或等於
<= 小於或等於
!= 不等於

注意

字符(串)也是能夠進行大小比較的,其比較依據的是其ascii碼。

1.7.4 Python中其餘邏輯操做符
1.isis not
有文獻資料中稱他們爲身份操做符,is和is not都是二元操做符,用於判斷左端與右端對象引用是否指向同一個對象。
2.innot in
in和not in稱爲成員操做符,用於檢查某個數據是否存在於某包含多個成員的數據類型(如字符串、列表、元組、字典等)之中。若是是成員關係,則in返回真;不然返回假;而not in則相反。

注意
成員操做符對於字典來講檢查的是鍵成員而不是值成員。

1.8 序列

字符串是字符的序列,列表元組則是任意Python數據類型或對象的序列。元組是不可變的,字符串也是不能夠變的(修改字符串就是從新建立一個字符串)。

1.8.1 序列切片

對於任何一個序列,它們的元素都是有序的,均可以使用序號來獲取每一項成員的值,這在前面都已經講述。另外一方面Python中序列的序號既能夠從左至右從0開始計數,又能夠從右至左從-1開始計數。如圖3.8所示,序列共有8個元素,從左至右數爲0至7,從右至左數爲-1至-8。

clipboard.png
以序號來取序列成員的話,同一成員能夠有兩個序號取法。

序列的切片是指用形如[start:end:step]來取序列中的部分紅員數據項。
意思是從序列中start序號開始到end前一個結束,每隔step個取一個成員。

例子:alst=[0,l,2,3,4,5,6,7]

使用形式 意義
alst[:] 取所有成員數據項
alst[0:] 取所有成員數據項
alst[:-1] 取除最後一個成員以外的全部成員數據項
alst[2:5] 獲得[2,3,4]
▲alst[::2] 每隔1個取一個成員,獲得[0,2,4,6]
alst[0:5:2] 從0至4每隔一個取一項,獲得[0,2,4]
▲alst[::-l] 從右至左取所有成員,獲得[7,6,5,4,3,2,1,0]
alst[5:0:-2] 從5至0(不包括0)從右至左每隔一個成員取一個成員,獲得[5,3,1]

1.8.2 序列內置操做

方 法 操做方法
len(s) 返回s的元素數(長度)
min(s) 返回s中的最小值
max(s) 返回s中的最大值
sum(s[,start] 返回s中各項的和
all(s) s中全部項爲真,則返回真,不然返回假
any(s) s中有一項爲真,則返回真,不然返回假
alst = [0,1,2,3,4]
sum (alst,15)           #求全部元素的和,連同15一塊兒加起來
#25
all (alst)
#False
any(alst)
#True
sum(alst[0:3])
#3
相關文章
相關標籤/搜索