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--列表與字典