文章結構:
1.各數據類型的特點
2.各數據類型的轉換
3.各數據類型的處理方法
4.運行測試
5.技巧總結
接著上一次筆記(python學習筆記之框架理解(2))進行,本次對各數據類型的特點、變換及處理進行逐一歸納總結。
(一)各數據類型的特點
1.數據的可變性:
數據的可變性可理解為通過修改數據時所佔用內存中的地址是否可變。即是對賦值後的變量進行修改時,通過id()函數查詢變量指向內存中的地址是否有變化來判斷其可變性,若數據修改了地址沒變則是可變數據類型,反之則是不可變數據類型。其中,
可變數據類型:列表list和字典dict
不可變數據類型:整型int(含布爾型)、浮點型float、字符串型string和元組tuple。具體理解可以參照如下博客;http://blog.csdn.net/dan15188387481/article/details/49864613。其中的舉例有點讓人疑惑,如在shell編輯器中對a,b分別賦值1時所指向的id相同,重新賦值1時也相同,但是若賦的值超過256時則兩個的id不相同,如下:
>>> a=1>>> b=1>>> id(a)32416472>>> id(b)32416472>>> a=1>>> id(a)32416472 | >>> c=257>>> d=257>>> id(c)40129200>>> id(d)40129020>>> c=257>>> id(c)40129128 |
但是在pycharm中運行,則不存在上述問題。
以上問題請求各位大神解惑。
2.數據的序列性:
數據的序列性可理解為數據中的每個元素有位置,可進行索引。其中,
有序數據類型:字符串,列表,元組
無序數據類型:數字,字典,集合
根據數據的可變性,有序數據中列表為可變序列,字符串和元組為不可變序列。
因此,針對有序數據都可對其中元素進行“查找”操作,對於可變序列還可進行增、刪、改等操作。
3.數據的可迭代性:
數據的可迭代性可理解為數據中元素是否可以被遍歷提取,也可通過isinstance(object,Iterable)函數來判斷。
其中,可迭代(iterable)數據類型有:字符串(str)、列表(list)、元組(tuple)、字典(dict)和集合(set)。其中,字典默認遍歷的是關鍵字,可選擇遍歷值.value();不可迭代數據類型有:數字類型(Number)。
(二)各數據類型的轉化
1.數字類型,整型、浮點型可相互轉化,布爾型可以轉換為整型或浮點型,是數字的字符串也可轉化,函數為int(),float()。
2.字符串類型,任何數據類型均可轉化為字符串類型,函數為str()。其中,整型和浮點型是可逆的(即有整型和浮點型通過str()函數轉換後可再通過int()或float()函數轉回),列表、元組是偽可逆(即可進行逆變換,但不再是原列表或元組),字典、布爾是不可逆的。
3.列表類型,字符串、元組、集合、字典可轉化為列表,其中字典是將其中的關鍵字或值轉化為列表,函數為list()。
4.元組類型,字符串、列表、集合、字典可轉化為元組,其中字典是將其中的關鍵字或值轉化為元組,函數為tuple()。
5.集合類型,字符串、列表、字典可轉化為集合,其中字典是將其中的關鍵字或值轉化為集合,函數為set()。
6.字典類型,若列表或元組中的元素以成對的列表或元素展現則這樣的列表或元組可轉化為字典,函數為dict()。形如下的列表或元組可轉化
a =[('name','kitty'),('age',18)]
b = (['name','kitty'],('age',18))
(三)各數據類型的處理方法
1.數字類型,可進行加減乘除,以及內置等一系列運算,如:
abs(x)返回數字的絕對值,如abs(-10)返回 10
cmp(x, y),如果 x < y返回 -1, 如果 x == y 返回 0, 如果 x > y 返回1。
2.字符串類型:
2.1字符串截取,通過索引來提取想要獲取的字符,str[ ::] 有序數據的索引是從0開始的,其中冒號前面的參數是開始下標,第二個冒號前面為結尾下標,第二個冒號後面為步長,其中取數是包含開始下標值,不包含結尾下標值。另外,可省略後面兩個參數直接按照索引取值str[index]。
2.2 大小寫轉換,str.upper()#轉大寫;str.lower()#轉小寫;str.capitalize()#字符串首為大寫,其餘小寫;str.swapcase()#大小寫對換 ;str.title()#以分隔符為標記,首字符為大寫,其餘為小寫。
2.3字符串搜索定位與替換,str.find('a') #查找字符串,沒有則返回-1,有則返回查到到第一個匹配的索引;str.rfind('a') #返回的索引是最後一次匹配的;str.index('a')#同find類似,返回第一次匹配的索引值,若沒有找到則報錯;str.rindex("a")#返回最後一次匹配的索引值;str.count('a')#字符串中匹配的次數;str.replace('a','b')#匹配替換,前面是舊的字符串,後面是新的字符串,另外還可跟一個參數最大替換次數。
2.4字符串分割變換,'-'.join(str)#前面的是分隔符,意思是將可迭代對象(str、tuple等)用分割符進行連接;str.split('/')#用內涵的分隔符進行分割,形成列表,後面可跟一個分割次數的參數;str.partition('a')#用字符串進行前後分開形成列表,以第一次出現的進行分,分割使用的字符串出現在形成的列表中;str.rpartition('n')#以右邊第一次出現的字符進行分開,分割使用的字符串出現在形成的列表中。
2.5刪除兩邊空白,str.strip()#刪除字符串兩邊的指定字符(只是首尾),括號的寫入指定字符,默認為空格。
str.lstrip()#去掉字符串的左邊空格,str.rstrip()#去掉字符串的右邊空格。
2.6字符串格式化,"%s %s "%(a,b)前後依次對應,另外一種方法是"{0} {1}".format(a,b)大括號中的索引可進行修改。
2.7另外還有計算字符串中字符的長度len(str),計算其中字符或字符串出現的次數str.count('a')等。
3.列表類型:
3.1 list.append(obj) #在列表末尾添加新的對象;
3.2 list.count(obj) #統計某個元素在列表中出現的次數;
3.3 list.extend(seq) #在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表);
3.4 list.index(obj) #從列表中找出某個值第一次匹配的索引位置;
3.5 list.insert(index, obj) #將對象插入列表;
3.6 list.pop(obj=list[-1]) #移除列表中的一個元素(默認最後一個元素),並且返回該元素的值;
3.7 list.remove(obj) #移除列表中某個值的第一個匹配項;
3.8 list.reverse() #反向列表中元素,倒轉;
3.9 list.sort([func]) #對原列表進行排序;
3.10 list[::] #對列表進行截取,通字符串操作。
4元組類型:
4.1 元組索引和截取,有序數據類型,同字符串、列表截取操作。
4.2 刪除元組 del tup;
4.3 遍歷元組,通過循環語句for等。
5字典類型:
5.1訪問字典裡的值 #dict['Name'],如果用字典裡沒有的鍵訪問數據,會輸出錯誤如下:
5.2 修改字典 #dict['name'] = "Tom";
5.3 刪除字典元素 #del dict['Name']; # 刪除鍵是'Name'的條目
其他方法如下,可參照http://www.runoob.com/python/python-dictionary.html查看:
6.集合類型:
6.1 集合的基本操作,增、刪、改
t.add('x') # 添加一項
s.update([10,37,42]) # 在s中添加多項
t.remove('H') #使刪除一項
6.2 集合的標準操作,包括並集、交集、差集和對稱差集等。
a = t | s # t 和 s的並集
b = t & s # t 和 s的交集
c = t–s # 求差集(項在t中,但不在s中)
d = t ^ s # 對稱差集(項在t或s中,但不會同時出現在二者中)
s.issubset(t) #s <= t 測試是否 s 中的每一個元素都在 t 中;
s.issuperset(t) #s >= t 測試是否 t 中的每一個元素都在 s 中;
s.union(t) #s | t返回一個新的 set 包含 s 和 t 中的每一個元素;
s.intersection(t) #s & t返回一個新的 set 包含 s 和 t 中的公共元素;
s.difference(t) #s - t 返回一個新的 set 包含 s 中有但是 t 中沒有的元素;
s.symmetric_difference(t) #返回一個新的set包含s和t中不重複的元素;
s.copy() #返回 set“s”的一個淺複製。
(四)運行測試
本次運行重點選取幾個項目來進行測試:
1.各數據類型的可迭代性:
from collections import Iterable
a = {123,456,789,147,258,369}
b = (123,456,789,147,258,369)
c = {"name":456,"age":789}
d = "ceshiyong"
e = ["sadji",456,789]
print(isinstance(a, Iterable))
print(isinstance(b, Iterable))
print(isinstance(c, Iterable))
print(isinstance(d, Iterable))
print(isinstance(e, Iterable))
》》》》》》》》》》》》》》》》》
True True True True True
2.列表和元組轉字典:
a =[('name','kitty'),('age',18)]
b = (['name','kitty'],('age',18))
print(dict(a))
print(dict(b))
print(type(dict(a)))
print(type(dict(b)))
》》》》》》》》》》》》》》》》
{'name': 'kitty', 'age': 18}
{'name': 'kitty', 'age': 18}
<class 'dict'>
<class 'dict'>
3.列表的取值:
a = ["name",123,456,789,"ceshi"]
b = a[1:4:2]
print(b)
》》》》》》》》》》》
[123, 789]
(五)技巧總結
各數據類型的屬性和方法很多,一一記住非常困難,有個好的方法是通過dir()函數來查詢對象具有的屬性和方法,然後找到某個方法後運用help()函數了解該方法的具體參數和用法。例如:查詢列表對象dir(list):
[ 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'],然後對其中的sort排序方法進行幫助,
>>> list = []
>>> help(list.sort)
Help on built-in function sort:
sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1