1. 程式人生 > >老齊python-基礎4(元祖、字典、集合)

老齊python-基礎4(元祖、字典、集合)

new area attr_ __init__ delattr 類型 擴展類 rac nta

1、元祖

元祖的特性結合了字符串和列表

元祖是用圓括號括起來的,其中的元素之間用逗號(英文半角)隔開。元祖中的元素是任意類型的python對象(包括以後自定義的對象)

元祖中的元素不可更改,所以修改列表的方法,在元祖中都會失效。

使用場景:

元祖比列表操作速度快。如果定義了一個值,並且唯一要用他做的是不斷的遍歷他,那麽請使用元祖代替列表。

如果對不需要修改的數據進行"寫保護",即該數據是常量,那麽此時也要使用元祖。如果必須要改變這些值,則可以轉換為列表修改。

元祖可以在字典(又一種對象類型,後面要講述)中被用作key,但是列表不可以。字典的key必須是不可變的。元祖本身就是不可改變的,而列表是可變的。

1.1定義元祖:

tu1 = tuple()
tu2 = (1,)
tu3 = (1,23,3,python)

>>> a = (3)
>>> type(3)
<class ‘int‘> #定義時要註意的

1.2索引和切片,與列表相同

>>> t = (1,23,[123,abc],(python,learn))
>>> t[2]
[123, abc]
>>> t[1:]
(23, [123, abc], (python, 
learn)) >>> t[2][0] 123 >>> t[3][1] learn

1.3轉換列表

>>> t = (1,23,[123,abc],(python,learn))
>>> tls = list(t)                            #轉換列表
>>> tls
[1, 23, [123, abc], (python, learn)]
>>> t_tuple = tuple(tls)                #
轉換元祖 >>> t_tuple (1, 23, [123, abc], (python, learn))

1.4方法

dir(tuple)
[__add__, __class__, __contains__, __delattr__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __getitem__, __getnewargs__, __gt__, __hash__, __init__, __init_subclass__, __iter__, __le__, __len__, __lt__, __mul__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __rmul__, __setattr__, __sizeof__, __str__, __subclasshook__, count, index]

2、字典(dictionary)

字典中的"鍵"必須是不可變的數據類型:"值"可以是任意數據類型

2.1創建字典

>>> mydict1 = {}
>>> mydict1
{}
>>> mydict2 = {name:zhang,site:bokeyuan,language:python}
>>> mydict2
{name: zhang, site: bokeyuan, language: python}   #"鍵/值對" 前面的叫做(key),後面的叫做值(value)

2.2增加鍵值對

>>> mydict2[name2] = "taj"   #追加鍵值對,內存位置不變,它是可變的
>>> mydict2
{name: zhang, site: bokeyuan, language: python, name2: taj}  

#方法2
>>> name = (["first","Google"],["second","Yahoo"])

>>> type(name)
<class ‘tuple‘>
>>> website = dict(name)

#或
>>> ad = dict(name = ‘tajzhang‘,ahe = 22)
>>> ad
{‘name‘: ‘tajzhang‘, ‘ahe‘: 22}

#方法3

>>> website = {}.fromkeys(("third","forth"),"facebook")
>>> website
{‘third‘: ‘facebook‘, ‘forth‘: ‘facebook‘}

2.3訪問字典的值

>>> mydict2 = {name:zhang,site:bokeyuan,language:python}
>>> mydict2["name"]
zhang

2.4基本操作

len(d),返回字典(d)中的鍵值對的數量

d[key],返回字典(d)中的鍵(key)的值

d[key]=value,將值(value)賦給字典(d)中的鍵(key).

del d[key],刪除字典(d)的鍵(key)項(將該鍵值對刪除).

key in d,檢查字典(d)中是否含有鍵為key的項

2.5字符串格式化輸出

>>> city_code = {"suzhou":"0512","ttangshan":"0315","huangzhaou":"0571"}
>>> "Suzhou is a beautiful city, its area code is {suzhou}".format(**city_code)
>>> temp = "<html><head><title>{lang}<title><body><p>My name is {name}.<p><body></head><html>"
>>> my = {"name":"qiwsir","lang":"python"}
>>> temp.format(**my)
<html><head><title>python<title><body><p>My name is qiwsir.<p><body></head><html>
#實際應用場景

2.6字典的方法

python重要概念:對象有類型,變量無類型

1)copy,復制,表層id()不同,如果有多層序列類型,則調用相同id

d1 = d.copy()

2)d("key").remove("value")

3)d.clean() 清空字典為空字典

4)del d 刪除字典

5)get 通過鍵取值

>>> d = {lang:python}
>>> d.get(lang)
python
>>> d.get(name)   #不會報錯,較為寬容

6)setdefault

>>> d
{lang: python}
>>> d.setdefault("lang")    #與get類似返回值
python
>>> d.setdefault("name","tajzhang")  #也可以直接添加鍵值
tajzhang
>>> d
{lang: python, name: tajzhang}
>>> d.setdefault("name","zhang2")     #修改值不生效
tajzhang
>>> d
{lang: python, name: tajzhang}
>>> d.setdefault(web)                      #可添加一個空的鍵
>>> d
{lang: python, name: tajzhang, web: None}

7)items,keys,values 三種字典擴展類型

>>> dd = {name:tajzhang,lang:python,web:www.google.com}
>>> dd_kv = dd.items()
>>> dd_kv
dict_items([(name, tajzhang), (lang, python), (web, www.google.com)])
>>> type(dd_kv)
<class dict_items>
>>> dd.keys()
dict_keys([name, lang, web])
>>> dd.values()
dict_values([tajzhang, python, www.google.com])

8)pop,popitems

>>> dd
{name: tajzhang, lang: python, web: www.google.com}
>>> dd.pop(name)     #指定刪除
tajzhang
>>> dd.pop(name)     #不存在則刪除報錯
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: name
>>> dd
{lang: python, web: www.google.com, name: zhang2}
>>> dd.popitem()    #與listpop方法類似,不指定值隨機刪除(因為字典是無序的),當字典為空時會報錯
(name, zhang2)  #返回一個元祖

9)update更新字典內容

>>> d1 = {"lang":python}
>>> d2 = {song:I dreamed a dream}
>>> d1.update(d2)    #把d2內容更新到d1中,d2不變
>>> d1
{lang: python, song: I dreamed a dream}
>>> d2
{song: I dreamed a dream}
>>> d2
{song: I dreamed a dream}
>>> d2.update([("name","qiwsir"),("web","itdiffer.com")])   #方法2
>>> d2
{song: I dreamed a dream, name: qiwsir, web: itdiffer.com}

2.7引入深度copy,不管數據多少層都是真復制 不同id()內存地址

>>> x = {lang:[python,java],name:qiwsir}
>>> import copy
>>> z = copy.deepcopy(x)
>>> z
{lang: [python, java], name: qiwsir}
>>> id(x["lang"])
4339599752
>>> id(z["lang"])
4339599880

3、集合

>>> s1 = set("tajzhang")    #創建集合
>>> s1
{h, j, a, g, z, t, n}
>>> s2 = set([123,"google","face","book","facebook","book"])  #指定創建
>>> s2
{google, facebook, 123, book, face}
>>> type(s2)
<class set>
>>> s3 = {"facebook",123} #直接創建
>>> s3
{123, ‘facebook‘}
>>> type(s3)
<class ‘set‘>

老齊python-基礎4(元祖、字典、集合)