Python的數據結構

Python的數據結構

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

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

Python已經內置肯定序列的長度以及肯定最大和最小的元素的方法。數據結構

此處介紹四種數據結構,分別是:app

  • list(列表)
  • tuple(元組)
  • dictionary(字典)
  • set(集合)

1、list(列表)

序列是Python中最基本的數據結構。序列中的每一個元素都有索引,索引正序從0開始,索引反序從-1開始。函數

列表是最經常使用的Python數據類型,列表的數據元素不須要具備相同的類型。列表是可變的類型。.net

總結起來:內容可變、長度可變、類型能夠不一樣,有序,能夠容納任何類型任意數量的對象。code

一、聲明列表

列表使用[]表示,其中的元素以逗號隔開。對象

代碼示例:blog

l1 = [] # 聲明一個空列表
l1 = list() #聲明一個空列表
l2 = [1,2,3]
l3 = ['a','b','c','d']
l4 = [1,2,3,'a','b','c',[],[10,'xyz']]

二、相關操做

針對列表有和字符串有相同的操做。列表和字符串都是序列。列表是一種容器型序列,字符串是一種扁平型的序列。 操做以下:排序

  • +:列表拼接。拼接完成以後返回一個新的列表。
  • *:重複列表,將列表重複拼接指定次數。
  • [index]:獲取指定索引的元素。
  • [indexbegin:indexend]:獲取列表中的一段元素。
  • del:刪除元素或列表
  • len():獲取列表長度。
  • in:判斷元素是否在列表中。
  • for in:遍歷列表。
  • max():獲取最大值。
  • min():獲取最小值
  • cmp():比較兩個列表的元素。此方法只存在於2.x的版本中,3.x版本已經刪除了此方法。
    • 比較規則:
      • 首先比較兩個列表的長度,長度大的列表大。
      • 長度同樣比較內容:
        • 比較的時候是按照順序比較的,只要能比較出大小,就不在日後進行了。
        • 若是比較的元素是同類型的,則比較其值,返回結果(-1表示list1小,0表示相等,1表示list1大)。
        • 若是兩個元素不是同一種類型,數字小於字母
        • 若是是數字,執行必要的數字強制類型轉換,而後比較。
        • 若是有一方的元素是數字,則另外一方的元素"大"(數字是"最小的")。
        • 不然,經過類型名字的字母順序進行比較。
        • 兩個列表的元素個數以及全部元素都是相等的,那麼結果0。

代碼示例:

l2 + l3
[1, 2, 3, 'a', 'b', 'c', 'd']
print l2[2]
print l2[2:3]
print l2[:3]
print l2[2:]
l2[2] = "abc"
print l2
3
[3]
[1, 2, 3]
[3]
[1, 2, 'abc']
list1 = [1,2,3]
list1 * 2
[1, 2, 3, 1, 2, 3]
print 1 in list1
print 2 not in list1
for x in list1:print x,
True
False
1 2 3
del list1[2]
print list1
del list1
[1, 2]
len(l2)
3
list1 = (3,2,5,4,9)
list2 = (1,2,3,4)
max(list1)
9
min(list1)
2
cmp(list1,list2)
1

三、函數

Python中提供了不少操做list的函數,具體以下:

# 向列表中追加元素,空列表只能使用此函數添加。
l1.append("2")
l1
['2']
# 列表拼接,和+有區別,+是返回一個新的列表,此方法是直接在列表後面添加
l2.extend(l3)
# 在指定位置插入指定原酸
l2.insert(0,100)
# 從列表中找出指定元素第一次出現的位置。若是沒有找到則報錯。
l2.index(2)
1
# 針對原列表進行操做,反轉列表。
l2.reverse()
l2
[3, 2, 1]
# 刪除並返回指定位置的元素,不指定默認刪除並返回最後一個元素。
l2.pop()
'd'
# 刪除第一次出現的指定元素。刪除不存在的元素,會報錯。
l2.remove(2)
l2
[100, 'a', 'abc', 'b', 'c']
# 排序
l2.sort()
l2
[100, 'a', 'abc', 'b', 'c']

2、tuple(元組)

Python中元組被稱爲不能修改的列表。元組自己就像一個作了限制的列表。

Python的元組與列表相似,不一樣之處在於:

  • 元組的元素不能修改,也不能刪除。
  • 元組使用小括號,列表使用方括號。

一、聲明元組

元組建立很簡單,只須要在括號中添加元素,並使用逗號隔開便可。

元組中只包含一個元素時,須要在元素後面添加逗號。

代碼示例:

t1 = tuple()
t2 = ()
t3 = (1,)
t4 = (1, 2, 3, "a", "b")
type(t2)
tuple

二、相關操做

元祖和列表的操做也及其的類似。也有如下幾種操做:

  • +:元祖拼接。拼接完成以後返回一個新的元祖。
  • *:重複元祖,將元祖重複拼接指定次數,返回一個新的元祖。
  • [index]:獲取指定索引的元素。
  • [indexbegin:indexend]:獲取元祖中的一段元素。
  • del:刪除元素或元祖
  • len(list):獲取元祖長度。
  • in:判斷元素是否在元祖中。
  • for in:遍歷元祖。
  • max():獲取最大值。
  • min():獲取最小值
  • cmp():比較。

代碼示例:

tuple1 = (1,2,3,4)
tuple2 = (7,8,9,0)
tuple1 + tuple2
(1, 2, 3, 4, 7, 8, 9, 0)
tuple1 * 2
(1, 2, 3, 4, 1, 2, 3, 4)
tuple1[1]
2
tuple1[0:2]
(1, 2)
1 in tuple1
True
for x in tuple1: print x,
1 2 3 4
max(tuple1)
4
min(tuple1)
1
len(tuple1)
4

三、函數

Python也提供了一些操做元祖的函數:

# 統計一個元素在元祖中出現的次數。
tuple1.count(1)
1
# 同list同樣
tuple1.index(1)
0

3、Dictionary(字典)

字典是另外一種可變容器模型,且可存儲任意類型對象。至關於java中的map。

一、聲明字典

字典的每一個鍵值 key value 對用冒號「:」分割,每一個鍵值對之間用逗號「,」分割,整個字典包括在花括號「{}」中。

字典值能夠沒有限制地取任何python對象,既能夠是標準的對象,也能夠是用戶定義的。

字典的鍵必須知足如下兩個條件:

  • 1)鍵必須惟一,不容許同一個鍵出現兩次。建立時若是同一個鍵被賦值兩次,後一個值會被記住。
  • 2)鍵必須不可變。能夠用數字,字符串或元組充當。

代碼示例:

d1 = {} #聲明一個空字典
d2 = dict() #聲明一個空字典
type(d2)
dict
d1 = {"name":"xh", "age":28}
d1["name"]
'xh'

二、相關操做

字典有如下幾種操做:

  • [key]:獲取指定key對應的值以及賦值。
  • del:刪除元素,刪除字典。
  • cmp():比較兩個字典。
  • len():獲取字典的長度。
  • str():字典的字符串形式。
  • type():獲取對象類型。

代碼示例:

dic1 = {"name":"xinghan", "age":28}
print dic1["name"]
dic1["age"] = 29
print dic1["age"]
print len(dic1)
print str(dic1)
print type(dic1)
del dic1["age"]
del dic1
print dic1
xinghan
29
2
{'age': 29, 'name': 'xinghan'}
<type 'dict'>



---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-8-ae0a48068d9a> in <module>()
      8 del dic1["age"]
      9 del dic1
---> 10 print dic1


NameError: name 'dic1' is not defined

三、函數

字典自己也提供了一些操做函數:

# 複製一個字典,淺拷貝
dic1 = {"name":"xinghan", "age":28, "gender":"man"}
dic2 = dic1.copy()
dic2
{'age': 28, 'gender': 'man', 'name': 'xinghan'}
# 建立一個以序列元素爲key,指定固定值的字典。
li = ["zhangsan", "lisi", "wangwu", "maliu"]
dic3 = dict.fromkeys(li, "man")
dic3
{'lisi': 'man', 'maliu': 'man', 'wangwu': 'man', 'zhangsan': 'man'}
# 獲取指定key的值。若是存在,那麼獲取的是第二個參數的值。
dic1.get("name", "haha")
'xinghan'
# 判斷字典中是否存在指定的key,存在返回True,不存在返回False。
dic1.has_key("name")
True
# 將字典轉換爲list返回,元素爲元祖。
dic1.items()
[('gender', 'man'), ('age', 28), ('name', 'xinghan')]
# 返回一個list,元素爲字典的key。
dic1.keys()
['gender', 'age', 'name']
# 若是字典中包含給定的鍵,則返回該鍵的值,不然返回爲該鍵設置的值。
dic1 = {"name":"xinghan", "age":28, "gender":"man"}
dic1.setdefault("addr")
dic1
{'addr': None, 'age': 28, 'gender': 'man', 'name': 'xinghan'}
# 將另一個字典,追加到當前字典中,存在相同key,當前字典的key對應的value會被覆蓋。
dic2 = {"host":"local"}
dic1.update(dic2)
dic1
{'addr': None, 'age': 28, 'gender': 'man', 'host': 'local', 'name': 'xinghan'}
# 以list的形式返回全部value
dic1.values()
['local', 'xinghan', 'man', 28, None]
# 刪除指定的key,並返回key對應的value。
dic1.pop("host")
'local'
# 隨機返回並刪除一對鍵值,若是字典爲空,則報錯。
dic1.popitem()
('name', 'xinghan')
# 清空字典
dic1.clear()
dic1
{}

4、set(集合)

在Python中,set是基本數據類型的一種集合類型,它有可變集合(set())和不可變集合(frozenset)兩種。

set是一個無序且不重複的元素集合。

set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key。

set有以下特性:

  • 1.不重複
  • 2.元素爲不可變對象

一、聲明集合

在Python中,建立空set必須使用函數set()。建立非空set可使用{}或者set()函數。

代碼示例:

se1 = set()
se2 = {"wang", "li", "hu", "hei"}

二、相關操做

集合的操做,和數學概念中的集合相似,有以下:

  • -:差集
  • &:交集
  • |:並集
  • !=:不等於
  • ==:等於
  • in:是不是成員關係
  • not in:是否不是成員關係

代碼示例:

se1 = {1, 2, 3, 4}
se2 = {3, 4, 5, 6}
se2 - se1
{5, 6}
se1 & se2
{3, 4}
se1 | se2
{1, 2, 3, 4, 5, 6}
se1 != se2
True
se1 == se2
False
se1 in se2
False
se1 not in se2
True

三、函數

set自身提供了一些操做函數,以下:

# 向集合中添加元素
s1 = {1, 2, 3, 4, 5}
s1.add(63456)
s1
{1, 2, 3, 4, 5, 63456}
# 將另一個set的內容添加到當前set中。
s2 = {'abc', 'ab', "c", 'd'}
s1.update(s2)
s1
{1, 2, 3, 4, 5, 63456, 'ab', 'abc', 'c', 'd'}
# 移除指定的元素,元素不存在,不作任何操做。
s1.discard("abc")
s1
{1, 2, 3, 4, 5, 63456, 'ab', 'c', 'd'}
# 刪除指定元素,元素不存在將報錯。
s1.remove(1)
s1
{2, 3, 4, 5, 63456, 'ab', 'c', 'd'}
#隨機刪除一個元素,並返回該元素,當集合爲空時,報錯。
s1.pop()
63456
# 清空集合
s1.clear()
s1
set()
# 淺拷貝
s1 = {1,2,3,4}
s2 = s1.copy()
s2
{1, 2, 3, 4}

上一篇:python基礎語法

下一篇:

相關文章
相關標籤/搜索