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
????????>>>
轉載于:https://blog.51cto.com/12107790/2125432
總結
以上是生活随笔為你收集整理的python--列表与字典的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生日蜡烛——第七届蓝桥杯C语言B组(省赛
- 下一篇: python tkinter chk