1. 程式人生 > >python--列表與字典

python--列表與字典

python基礎

列表與字典是其他對象類型的集合。

一、內置對象---list(列表),可以包含數字、字符串或其他列表。其屬性主要有

1.任意對象的有序集合,列表就是收集其他對象的地方,同時是有位置順序的。

2.通過偏移讀取

3.可變長度、異構和任意嵌套

4.屬於可變序列的分類

5. 對象引用數組

實際應用中的列表

1.基本列表操作

>>> len([1,2,3]) #列表長度

3

>>> [1,2,3]+[3,4,5] #合並

[1, 2, 3, 3, 4, 5]

>>> [1,2,3]*2 #重復

[1, 2, 3, 1, 2, 3]

>>> str([1,2])+"34" #將列表轉換為字符串後合並

'[1, 2]34'

>>> [1,2]+list("34") #將字符串轉換列表後合並

[1, 2, '3', '4']

>>>

2.列表叠代和解析(隨時蓋樓)

>>> s=[]

>>> for c in 'spam':

... s.append(c*4) #在列表末尾添加新值

...

>>> s

['ssss', 'pppp', 'aaaa', 'mmmm']

>>>

3.索引、分片和矩陣

>>> s=['one','two','three']

>>> s[1]

'two'

>>> s[-1]

'three'

>>> s[1:]

['two', 'three']

>>> s=[[1,2,3],[4,5,6],[7,8,9]]

>>> s[1]

[4, 5, 6]

>>> s[1][1]

5

4.原處修改列表

>>> s=['one','two','three']

>>> s[0]="I" #使用索引賦值的方法在原處修改

>>> s

['I', 'two', 'three']

>>> s[1:]=["love",'you'] #通過分片方法在原處修改,分片的理解最好分兩步,1刪除,刪除等號左邊指定的分片。2插入,將等號右邊的對象的片段插入舊分片的位置

>>> s

['I', 'love', 'you']

>>>

>>> s[1:2]=[] #先刪除咯

>>> s

['I', 'you'] #註 實際上分片賦值時一次性替換整個片段的,因為被賦值的序列長度不一定要與被賦值的分片的長度相匹配,所以可以用來替換,增長,縮短主列表。

5.列表方法

列表對象也支持特定類型方法調用,方法:是屬於特性對象的函數(實際上是引用函數的屬性),以下方法只使用於列表

>>> s

['I', 'you']

>>> s.append('love') #在列表末尾增加一個單項

>>> s

['I', 'you', 'love']

>>> s.sort() #進行排序,默認是升序(字符串)

>>> s

['I', 'love', 'you']

>>> s.sort(key=str.lower) #可以使用name=value語法配置選項,key參數給了一個參數的函數,它返回在排序中使用的值

>>> s

['I', 'love', 'you']

>>> s.sort(key=str.lower,reverse=True) #而reverse參數允許使用降序而不是升序

>>> s

['you', 'love', 'I']

>>>

註:當使用append和sort原處修改列表對象時,結果並沒有返回列表而是NONE,如下

>>> s

['one', 'two', 'three']

>>> s.append("four") #使用此方法即可

>>> s

['one', 'two', 'three', 'four']

>>> s=s.append("five") #這樣的修改對象操作 有點副作用,沒有理由重新賦值,使用上面的操作即可

>>> s

>>> #這裏是none

>>>

>>> s=['one','two','three']

>>> s.extend(['four','five']) #同時在末尾添加多個項

>>> s

['one', 'two', 'three', 'four', 'five']

>>> s.pop() #刪除末尾的項並返回已刪除的項

'five'

>>> s.reverse() #原處反轉

>>> s

['four', 'three', 'two', 'one']

>>> list(reversed(s)) #反轉返回新列表,未保存在s中

['one', 'two', 'three', 'four']

>>> s.index('three') #查找three的偏移值

1

>>> s.insert(1,'test') #在偏移1處插入test項

>>> s

['four', 'test', 'three', 'two', 'one']

>>> s.remove('test') #刪除一個項

>>> s.pop(1) #刪除指定偏移的項

'three'

>>> s

['four', 'two', 'one']

>>>

>>> del s[0] #刪除索引為0的項

>>> s

['two', 'one'] #刪除分片從偏移0到末尾

>>> del s[0:]

>>> s

[] #空列表

>>>

二、字典:無序的集合,是通過鍵對字典進行索引操作,不是偏移位置存取。

1.創建方法

>>> {'name':'Lili','age':18} #一次性創建,知道有多少鍵

{'name': 'Lili', 'age': 18}

>>> s={} #動態的創建每一個鍵及值

>>> s['name']='Lili'

>>> s['age']=18

>>> s

{'name': 'Lili', 'age': 18}

>>> dict(name='Lili',age=18) #代碼少,鍵必須是字符串

{'name': 'Lili', 'age': 18}

>>> dict([('name','Lili'),('age',18)]) #程序運行時將鍵和值逐步建立成序列

{'name': 'Lili', 'age': 18}

>>>

>>> dict.fromkeys(['a','b'],0) #通過fromkeys簡單的傳入所有鍵列表,以及所有鍵的初始值

{'a': 0, 'b': 0}

>>>

>>> dict.fromkeys('fuck')

{'f': None, 'u': None, 'c': None, 'k': None}

>>>

>>> list(zip(['a','b','c'],[1,2,3])) #zip函數將對象中對應的元素打包成一個個元組,然後將元組轉換為列表

[('a', 1), ('b', 2), ('c', 3)]

>>> s=dict(zip(['a','b','c'],[1,2,3])) #將鍵和值對應起來傳給dict

>>> s

{'a': 1, 'b': 2, 'c': 3}

>>> s={k:v for (k,v)in zip(['a','b','c'],[1,2,3])} #通過字典解析方法創建字典

>>> s

{'a': 1, 'b': 2, 'c': 3}

>>> s={x:x**2 for x in [1,2,3,4]}

>>> s

{1: 1, 2: 4, 3: 9, 4: 16}

>>> s={x:x*4 for x in 'fuck'}

>>> s

{'f': 'ffff', 'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}

>>>

2.字典的基本操作

>>> s={'x':3,'y':4,'z':'5'} #用花括號括起來,使用key:value並用逗號隔開的元素

>>> s['x'] #使用key鍵取值,而不是偏移

3

>>> s

{'x': 3, 'y': 4, 'z': '5'}

>>>

>>> len(s) #計算字典的長度

3

>>> 'x' in s #判斷鍵是否存在於字典

True

>>> list(s.keys()) #用鍵來創建一個列表

['x', 'y', 'z']

>>>

>>> s['x']=['a','b','c'] #在原處直接修改

>>> s

{'x': ['a', 'b', 'c'], 'y': 4, 'z': '5'}

>>> del s['z'] #del()通過使用key刪除一個元素

>>> s

{'x': ['a', 'b', 'c'], 'y': 4}

>>>

>>> dir(s) #字典可用的方法

['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

>>> list(s.values()) #通過values方法返回字典中的元素

[['a', 'b', 'c'], 4]

>>> list(s.items()) #通過items方法返回字典中的對元組(key,value)

[('x', ['a', 'b', 'c']), ('y', 4)]

>>>

>>> s.get('z') #使用get()可以判斷一個key是否存在並返回其元素

>>>

>>> s.get('x') #使用get()可以判斷一個key是否存在並返回其元素並返回其值

['a', 'b', 'c']

>>> print(s.get('z')) #使用get()可以判斷一個key是否存在並返回其元素,若不存在返回none

None

>>> s1={'z':5,'a':6}

>>> s.update(s1) #將字典s1合並到s中

>>> s

{'x': ['a', 'b', 'c'], 'y': 4, 'z': 5, 'a': 6}

>>> s.pop() #與列表的pop有所不同,列表中pop()可刪除最後一個元素並返回其值。但字典不可

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: pop expected at least 1 arguments, got 0

>>> s.pop('a') #通過pop(鍵)刪除一個元素

6

>>>s


{'x': 1, 'y': 2, 'z': 3}

>>> for i in s: #通過叠代字典中的每一個鍵,打印他們的鍵和值。此命令等同於 for i in s.keys().

... print(i,'\t',s[i])

...

x 1

y 2

z 3

>>>

>>> s={1:3,2:2,3:1} #鍵不一定是字符串。只要是不可變的對象都可以(除列表外)

>>> s

{1: 3, 2: 2, 3: 1}

>>>

3.字典視圖

>>> s

{'f': 'ffff', 'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}

>>> s.keys()

dict_keys(['f', 'u', 'c', 'k'])

>>> d=s.keys()

>>> d

dict_keys(['f', 'u', 'c', 'k'])

>>> list(d)

['f', 'u', 'c', 'k']

>>> f=s.values()

>>> f

dict_values(['ffff', 'uuuu', 'cccc', 'kkkk'])

>>> list(f)

['ffff', 'uuuu', 'cccc', 'kkkk']

>>> del s['f']

>>> s

{'u': 'uuuu', 'c': 'cccc', 'k': 'kkkk'}

>>> list(d)

['u', 'c', 'k']

>>> list(f)

['uuuu', 'cccc', 'kkkk']

>>>

5.字典鍵排序

>>> s=dict(zip(['y','a','x'],[1,2,3]))

>>> s

{'y': 1, 'a': 2, 'x': 3}

>>> ks=s.keys()

>>> list(ks)

['y', 'a', 'x']

>>> ks=list(ks)

>>> ks

['y', 'a', 'x']

>>> ks.sort() #sort()

>>> ks

['a', 'x', 'y']

>>> for k in ks:print(k,s[k])

...

a 2

x 3

y 1

>>>

>>>

>>> s=dict(zip(['a','c','b'],[1,2,3]))

>>> s

{'a': 1, 'c': 2, 'b': 3}

>>> ks=s.keys()

>>> ks

dict_keys(['a', 'c', 'b'])

>>> sorted(ks) #sorted()

['a', 'b', 'c']

>>> for k in sorted(ks):print(k,s[k])

...

a 1

b 3

c 2

>>>

6.測試字典鍵是否存在。使用in或者get方法

>>> s

{'a': 1, 'c': 2, 'b': 3}

>>> 'a' in s

True

>>> print(s.get('a'))

1

>>>


python--列表與字典