Python的數據結構

序列是Python中最基本的數據結構。序列中的每一個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。html

Python有6個序列的內置類型,但最多見的是列表和元組。python

序列均可以進行的操做包括索引,切片,加,乘,檢查成員。數據結構

此外,Python已經內置肯定序列的長度以及肯定最大和最小的元素的方法。app

1、列表

列表是最經常使用的Python數據類型,它能夠做爲一個方括號內的逗號分隔值出現。函數

列表的數據項不須要具備相同的類型,建立一個列表,只要把逗號分隔的不一樣的數據項使用方括號括起來便可。spa

Python中列表是可變的,這是它區別於字符串和元組的最重要的特色,一句話歸納即:列表能夠修改,而字符串和元組不能。code

list1 = ['XXXX', 'b', 3, 'c',3, '&', 'a', 3, '3', 3, 'aa', '3', 'XXXX']
list2 = ['e', 'f', 'g']

若是想要建立一個空列表,可使用以下的方式。htm

In [27]: list1=[]                  # 建立一個空的列表

In [28]: type(list1)
Out[28]: list

在實際編寫代碼的過程當中,咱們會直接使用 list 函數生成一個列表。對象

In [29]: list2=list()             # 經過list方法建立一個空的列表

In [30]: list2
Out[30]: []

In [31]: type(list2)
Out[31]: list

想要向列表裏面添加元素可使用 append 方法。排序

In [33]: list2.append("a")        # 向列表裏面添加"a"元素

In [34]: list2
Out[34]: ['a']

In [35]: list2.append("b")        # 向列表裏面添加"b"元素

In [36]: list2
Out[36]: ['a', 'b']

接着咱們連續添加了幾個元素以後,想要刪除某個元素該怎樣呢?

In [39]: list2
Out[39]: ['a', 'b', 'cdewd', 'qewq']

In [40]: del list2[-1]                  # 刪除列表中最後一個元素

In [41]: list2        
Out[41]: ['a', 'b', 'cdewd']

也可使用 remove 方法刪除指定下標的元素。

In [42]: list2.remove(list2[2])    # 刪除列表中下標爲2的元素

In [43]: list2
Out[43]: ['a', 'b']

舉個例子,如今有兩個非空列表 list1 和 list2,咱們將使用一些方法對兩個列表進行操做。

list1 = ['XXXX', 'b', 3, 'c',3, '&', 'a', 3, '3', 3, 'aa', '3', 'XXXX']
list2 = ['e', 'f', 'g']

將 list1 取出 ‘XXXX’ 中間的部分,造成一個新的列表list3。

list3=list1[1:-1]
print(list3)

list3 = [ 'b', 3, 'c',3, '&', 'a', 3, '3', 3, 'aa', '3',]

而後刪除 list3 中的特殊符號。

del list3[4]
print(list3)

list3 = [ 'b', 3, 'c',3,  'a', 3, '3', 3, 'aa', '3',]

統計 3 在list3中出現的次數。

print(list3.count(3))

對 list3 排序

list3.sort()
print(list3)

 

2、元組

Python 的元組與列表相似,不一樣之處在於元組的元素不能修改。

元組使用圓括號括起來,元素之間用逗號分隔;空的圓括號表示空元組;當只有一個元素時,必須以逗號結尾。

tup1 = ('abc', 'def', 1996, 2018);
tup2 = (1, 2, 3, 4, 5 );
tup3 = "a", "b", "c", "d";      # 不須要括號也能夠
type(tup3)
<class 'tuple'>

元組中只包含一個元素時,須要在元素後面添加逗號,不然括號會被看成運算符使用。

In [17]: t1=1

In [18]: type(t1)
Out[18]: int                  # 表示的是字符串

In [19]: t2=1,

In [20]: type(t2)
Out[20]: tuple                # 表示的是元組

當對一個元素賦值時,再將該元素加入元組,那麼該元素表示的則是實際的值。

In [24]: b="qwe"

In [25]: t=("a",b,"c")

In [26]: t
Out[26]: ('a', 'qwe', 'c')

元組可使用下標索引來訪問元組中的值,也能夠對元組進行鏈接組合,可是元組中的元素值是不容許刪除的,但咱們可使用 del 語句來刪除整個元組。

del tup;   # 慎用

與字符串同樣,元組之間可使用 + 號和 * 號進行運算。這就意味着他們能夠組合和複製,運算後會生成一個新的元組。

Python 表達式 結果 描述
len((1, 2, 3)) 3 計算元素個數
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 鏈接
('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') 複製
3 in (1, 2, 3) True 元素是否存在
for x in (1, 2, 3): print (x,) 1 2 3 迭代

由於元組也是一個序列,因此咱們能夠訪問元組中的指定位置的元素,也能夠截取索引中的一段元素.

L = ('abc', 'qwe', 'asd')

以上面元組 L 爲例,歸納以下。

Python 表達式 結果 描述
L[2] 'asd' 讀取第三個元素
L[-2] 'qwe' 反向讀取;讀取倒數第二個元素
L[1:] ('qwe', 'asd') 截取元素,從第二個開始後的全部元素。

 

3、字典

字典是另外一種可變容器模型,且可存儲任意類型對象。

字典的每一個鍵值(key=>value)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號({})中 ,格式以下所示:

d = {key1 : value1, key2 : value2 }

字典是Python中惟一的映射類型(哈希表),其對象是可變的,可是字典的鍵必須使用不可變對象,一個字典中可使用不一樣類型的鍵值,方法能夠有:

keys()

values()

items()

咱們能夠像建立列表的方式同樣建立一個空字典。

In [11]: dict={}

In [12]: type(dict)
Out[12]: dict

往字典裏面添加一些數據。

In [13]: dict={'a':1,1:123} 
In [14]: dictOut[14]: {1: 123, 'a': 1}         # 順序是可變的

存入字典的數據類型應該用只讀的。

In [15]: dict1={'a':1, 1:123, ('qq','wx'):'hello'}

In [16]: dict1
Out[16]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}

查看字典的長度,能夠看到咱們剛剛定義的字典有3個元素。

In [17]: len(dict1)
Out[17]: 3

在 ipython 中使用tab鍵咱們能夠查看字典有多少種方法。

In [18]: dict.
dict.clear       dict.has_key     dict.itervalues  dict.setdefault  dict.viewkeys
dict.copy        dict.items       dict.keys        dict.update      dict.viewvalues
dict.fromkeys    dict.iteritems   dict.pop         dict.values      
dict.get         dict.iterkeys    dict.popitem     dict.viewitems

查看全部的 keys 值。

In [18]: dict1.keys()
Out[18]: ['a', 1, ('qq', 'wx')]

查看全部的values值,也會一樣返回一個列表,裏面是字典所存儲的全部values值。

In [19]: dict1.values()
Out[19]: [1, 123, 'hello']

使用 keys 值查找 values 值。

In [16]: dict1
Out[16]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}

In [22]: dict1.get(1)
Out[22]: 123

若是keys值不在所取的字典裏,不會返回值,可是給定了keys,values的話,則會返回給的values值。

In [24]: dict1.get('b')

In [25]: dict1.get('b','c')
Out[25]: 'c'

判斷 keys 是否存在於字典。

In [26]: 'v' in dict1
Out[26]: False

In [27]: 'a' in dict1
Out[27]: True

也可使用字典的方法進行判斷。

In [28]: dict1.has_key('v')
Out[28]: False

In [29]: dict1.has_key('a')
Out[29]: True

使用 items 能夠將字典返回爲一個列表,成爲列表以後就能夠對其遍歷,或者切片,而後獲得想要的結果。

In [16]: dict1
Out[16]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}

In [30]: dict1.items()
Out[30]: [('a', 1), (1, 123), (('qq', 'wx'), 'hello')]

字典的 update 方法把兩個字典更新成一個字典:

In [35]: dict1
Out[35]: {1: 123, 'a': 1, ('qq', 'wx'): 'hello'}

In [36]: dict2
Out[36]: {'e': 3, 'q': 1, 'w': 2}

In [37]: dict.update(dict1,**dict2)

In [38]: dict
Out[38]: {1: 123, 'a': 1, 'e': 3, 'q': 1, 'w': 2, ('qq', 'wx'): 'hello'}

好比咱們能夠寫個 for 循環來遍歷出字典的 keys 和 values。

In [47]: for k in dict1:
   ....:     print k,dict1[k]
   ....:     
a 1
1 123
('qq', 'wx') hello

也能夠先用 items 方法讓字典返回一個列表,再進行 for 循環。

In [50]: dict1.items()
Out[50]: [('a', 1), (1, 123), (('qq', 'wx'), 'hello')]

In [51]: for k, v in dict1.items(): print k,v
a 1
1 123
('qq', 'wx') hello

小練習:

#!/usr/local/python3/bin/python

info={}
name=input("Please input a number : ")
age=input("Please input your age : ")
sex=input("Please input your sex(M/F) : ")

info['name']=name  #下標爲name的存到info字典裏面
info['age']=age
info['sex']=sex

#print(info)
#print(info.items())

for i,w in info.items():
    print('%s : %s' % (i,w))

運行狀況以下:

Please input a number : zyy
Please input your age : 21
Please input your sex(M/F) : F
name : zyy
age : 21
sex : F

 

 

參考資料:

1. http://www.runoob.com/python3/python3-list.html

相關文章
相關標籤/搜索