Python數據類型-數據集


數據類型-數據集 

一、基本數據類型——列表

列表的定義:

定義:[] 內以逗號分隔,按照索引,存放各種數據類型,每個位置代表一個元素

列表的創建:

list_test=['張三', '李四', '王五']

list_test = list('王五')

 

列表的特點和常用操作

特性:

1. 可存放多個值

2. 按照從左到右的順序定義列表元素,下標從0開始順序訪問,有序

3. 可修改指定索引位置對應的值,可變

 

常用操作:

# 索引

i = ['egon', 'test', 'seven', 'mike']
print(i[0])

 

# 切片

i[0:2]

['egon', 'test']

 

>>> i[2:5]

['seven', 'mike']

>>> i[:2]

['egon', 'test']

>>> i[::2]

['egon', 'seven']

>>> i[::-1]

['mike', 'seven', 'test', 'egon']

 

# 追加

>>> i.append('eve')

>>>  i

['egon', 'test', 'seven', 'mike', 'eve']

 

# 刪除

>>> i.remove('eve')

>>> i

['egon', 'test', 'seven', 'mike']

>>> i.pop()

'mike'

 

# 長度

>>> len(i)

# 包含

>>> 'mike' in i

True

列表與字符串 —— split 和 join

# 分割

item1 = []
item = "www.luffycity.com"
item1 = item.split('.')
print(item1)

 # 連接

>>> i= ['hi', 'mike']

>>> '!'.join()

'hi!mike'

 

# range

 

count = 0
for i in range(101):
    if i % 2 == 0:
        count += i
print(count)

 

  

二、 基本數據類型—— 元組

元組的定義和特性

特性:

  • 可存放多個值
  • 不可變
  • 按照從左到右的順序定義元組元素,下標從0開始順序訪問,有序

元組的創建與常用操作

# 創建

ages = (11,22, 33, 44, 55)

ages = tuple((11,22, 33, 44, 55))

# 常用操作

# 索引

>>> ages = (11,22, 33, 44, 55)

>>> ages[0]

11

 

>>> ages[-1]

55

 

# 切片 : 同list

# 循環

>>> for age in ages:

         print(age)

11

22

33

44

55

 

# 長度

>>> len(ages)

5

 

# 包含

>>> 11 in ages

True

 

元組的特性詳解

1.  可存放多個值

如果元組中只有一個值

t = (1,)

t = (1)   # <==>t = 1

元組中不僅可以存放數字,字符串,還可以存放更加復雜的數據類型

2. 不可變

元組本身不可變,如果元組中還包含其它可變元素,這些可變元素可以改變

 

三 、可變 不可變數據類型和hash

可變類型 不可變類型
列表 數字
  字符串
  元組

 

 

 

 

 

# 列表

>>> i = [1,2,3,4]

>>> id(i)

4392665160

>>> i[1] = 1.5

>>> i

[1,1.5,3,4]

>>> id(i)

4392665160

# 數字

>>> a = 1

>>> id(a)

4297537952

>>> a+=1

>>> id(a)

4297537984

從內存角度看列表與數字的變與不變

 

字符串

# 例1

>>> s = 'hello'

>>> s[1] = 'a'

Traceback (most recent call last):

    File "<pyshell#5>". line 1, in<module>

        s[1] = 'a'

TypeError:'str' object does not support item assignment

# 例2

>>> s = 'hello'

>>> id(s)

4392917064

>>> s += 'world'

>>> s

'hello world'

>>> id(s)

4393419504

    字符串也可以像列表一樣使用索引操作,但是通過上例可以看出,不能像修改列表一樣修改一個字符串的值,當對字符串進行拼接的時候,原理和整數一樣,id值已經發生了變化,id值已經發生了變化,相當於變成了另外一個字符串。

 

元組不允許修改

>>> t = (1,2,3,4)

>>> t[1] = 1.5

Traceback (most recent call last):

    File "<pyshell#5>". line 1, in<module>

        t[1] = 1.5

TypeError: 'tuple' object does not support item assignment

 

hash

存儲如下一些數據:

張三 13912345678

李四 13812345678

王五 13612345678

 

>>> hash("張三")
-354361033326252388
>>> hash("李四")
-8011736106419318409
>>> hash("王五")
-5353383273595561117

 

四、字典

字典的定義和特性

字典是python語言中唯一的映射類型

定義: {key1:value1,key2:value2}

1、鍵與值用冒號":"分開

2、項與項用逗號“,” 分開

特性:

  1. key-value結構
  2. key必須可hash,且必須為不可變數據類型,必須唯一
  3. 課存放任意多個值,課修改、可以不唯一
  4. 無序

字典的創建與常見操作

person = {"name":"mike", age:20}

person = dict(name='mike', age=20}

person = dict((['name','mike'],['tom',22]))

{}.fromkeys(seq,100)  # 不指定100默認為NOne

# 注意

>>> dic = {}.fromkeys(['k1','k2'],[])
>>> dic
{'k1': [], 'k2': []}

>>> dic['k1'].append(1)
>>> dic
{'k1': [1], 'k2': [1]}

 

字典的常見操作

鍵、值、鍵值對

  1. dic.keys()  返回一個包含字典所有key的列表
  2. dic.values()  返回一個包含字典所有value的列表
  3. dic.items()   返回一個包含所有(鍵、值)元組的列表
  4. dic.iteritems()、dic.iterkeys()、dic.itervalues() 與它們對應的非迭代方法一樣,不同的是他們返回一個迭代值,而不是一個列表

# 新增

  1. dic['new_key'] = 'new_value'
  2. dic.setdefault(key,None), 如果字典中不存在key鍵,由dic[key]= default 為他賦值

# 刪除

  1. dic.pop(key[,default]) 和get方法相似。如果字典中存在key,刪除並返回key對應的vuale;如果key不存在,且沒有給出default的值,則引發keyerror異常
  2. dic.clear() 刪除字典中的所有項或元素

# 修改

  1. dic['key'] = 'new_value',如果key在字典中存在,‘new_value'將會替代原來的value值
  2. dic.update(dic2) 將字典dic2的鍵值對添加到字典dic中

# 查看

  1. dic['key'] ,返回字典中key對應的值,若key不存在字典中,則報錯
  2. dic.get(key,default=None) 返回字典中key對應的值,若key不存在字典中,則返回default的值

# 循環

  1. for k in dic.keys()
  2. for k,v in dic.items()
  3. for k in dic

# 長度

len(dic)

五、 集合

認識集合

           集合是一個數學概念,由一個或多個確定的元素所構成的整體叫集合

          集合中的元素有三個特點:

  1. 確定性(元素必須可hash)
  2. 互異性(去重)
  3. 無序性(集合中的元素沒有先后之分),如集合{3,4,5}和{3,5,4}算作一個集合

          注意: 集合存在的意義就在於去重和關系運算

集合的關系運算

&.& =:交集——即學習跆拳道課程也學習機器人的同學

i={'張三','李四','王五'}

p={'張三','李四','mike'}

print(i.intersection(p))

print(i & p)

  

|,|=:合集,也叫並集——學習跆拳道課程和學習機器人的同學

 

i={'張三','李四','王五'}

p={'張三','李四','mike'}

print(i.union(p))
print(i|p)

 

-,-=:差集——只在學習跆拳道課程而不學習機器人的同學

i={'張三','李四','王五'}

p={'張三','李四','mike'}

print(i.difference(p))
print(i-p)

  

~,~=:對稱差集——只在學習跆拳道課程或只學習機器人的同學

i={'張三','李四','王五'}

p={'張三','李四','mike'}

print(i.symmetric_difference(p))
print(i^p)

  

包含關系

in,not in:判斷某元素是否在集合內

==,!= : 判斷兩個集合是否相等

兩個集合之間一般有三種關系,相交、包含、不相交,在python中分別用下面的方法判斷

  • set.isdisjonit(s): 判斷兩個集合是不是不相交
  • set.issuperset(s): 判斷集合是不是包含其他集合,等同於a>=b
  • set.issubset(s): 判斷集合是不是被其他集合包含,等同於a<=b

集合的常用操作:

# 元素的增加

單個元素的增加: add(),add的作用類似列表中的append

對序列的增加:update(),而update類似extend方法,update方法可以支持同時傳入多個參數

 

#元素的刪除

集合刪除單個元素有兩種方法:

元素不在原集合中時:

set.discard(x)不會拋出異常

set.remove(x) 會拋出keyError錯誤

pop(): 由於集合是無序的,pop返回的結果不能確定,且當集合為空時調用pop會拋出keyerror錯誤

clear(): 清空集合

 

六:collections

collections模塊:

  1. namedtuple: 生成可以使用名字來訪問元素內容的tuple子類
  2. deque:雙端隊列,可以快速的從另外一側追加和推出對象
  3. counter:計數器,主要用來計數
  4. orderddict:有序字典
  5. defaultdict:帶有默認值的字典

# namedtuple

from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x)
print(p.y)

 輸出:

1
2

namedtuple是一個函數,它用來創建一個自定義的tuple對象,並且規定了tuple元素的個數,並可以用屬性而不是索引來引用tuple的某個元素

類似的,要用坐標和半徑表示一個圓,可以用namedtuple定義

# namedtuple('名稱',[屬性list]):

Circle = namedtuple('Circle',['x','y','r'])

 

deque

     deque 是為了高效實現插入和刪除操作的雙向列表,適合用於隊列和棧

from collections import deque
q = deque(['a', 'b', 'c'])
q.append('x')
q.appendleft('y')
print(q)

  

defaultdict

  使用dict時,如果引起的key不存在,就會拋出KeyError。希望key不存在時,返回默認值,用defaultdict

 

orderedDict

使用dict時,key是無序的,在對dict做迭代時,無法確定key的順序

要保持key的順序,可以用orderedDict

orderedDict可以實現一個FIFO(先進先出)的dict,當容量超出限制時,先刪除最早添加的key

from collections import Counter
c = Counter()
for ch in 'programming':
    c[ch] = c[ch] + 1
print(c)

 輸出:

Counter({'r': 2, 'g': 2, 'm': 2, 'p': 1, 'o': 1, 'a': 1, 'i': 1, 'n': 1})

 Counter實際上也是dict的一個子類

 

知識點小結:

基本數據類型:

可變數據類型

不可變數據類型
列表(list) 數字類(bool,int,float,complex)
 字典(dict) 字符串(str)
 集合(set) 元組(tuple)
  不可變集合(frozenset)

 

 

 

 

 

 

擴展數據類型

  1. namedtuple: 生成可以使用名字來訪問元素內容的tuple子類
  2. deque:雙端隊列,可以快速的從另外一側追加和推出對象
  3. counter:計數器,主要用來計數
  4. orderddict:有序字典
  5. defaultdict:帶有默認值的字典

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM