介绍
list和dict,顾名思义,就是列表和字典,这是python中非常基础的数据结构,也是非常重要且用途最广的数据结构
列表list就是一串糖葫芦
list是python的一种内置数据结构,想象成一串糖葫芦。python提前设定好了list的特点和一些固定操作(或方法或函数),计算机知道该怎么进行具体操作。list用中括号表示,里面的值用英文的逗号分开。
特点与操作
1. list有这么几个简单的特点:
(1) 长度不固定,就像糖葫芦可以串8个,串10个,当然也有奸商可能就串6个,甚至4个
(2) 类型不固定,糖葫芦可以串山楂,黑枣,橘子等等,list里面也可以放字符串,数字,列表等等
(3) 可以修改,就好像制作糖葫芦,你本来要串个山楂,结果串了个橘子,可以把对应的那个错的修改了就好啦。
2. list可以做这样的几个操作:
(1) append
: 追加元素,相当于给糖葫芦一个个的串山楂
(2) +,extend
: 多个列表相加, 相当于把两串糖葫芦连在一起
(3) insert
: 向指定位置插入一个值,假如要给糖葫芦的第二个位置串一个黑枣
(4) remove, pop
: 移除某一个元素,糖葫芦中间某个坏了,给剔除
(5) a in list_b
: 检查某个元素是否存在,检查一个纯山楂的糖葫芦里是不是有黑枣
(6) sort
: 排序,这个糖葫芦比较难办,假装要一串山楂从小到大排列的糖葫芦吧!
(7) [:]
: 切片操作,假如你吃糖葫芦时候,就喜欢吃第2个到第5个,该怎么啃?
代码演示:
help(list)
dir(list)
hulu1 = ['zha','zha','zha','zha']
hulu2 = [1,2,3,4,5,6,7]
hulu3 = []
hulu3 = hulu1+hulu2
(1)hulu3
['zha', 'zha', 'zha', 'zha', 1, 2, 3, 4, 5, 6, 7]
(2)hulu3.extend(hulu1)
hulu3
['zha', 'zha', 'zha', 'zha', 1, 2, 3, 4, 5, 6, 7, 'zha', 'zha', 'zha', 'zha']
(3)hulu1.append('zao')
hulu1.append('zao')
hulu1.append('zao')
hulu1
['zha', 'zha', 'zha', 'zha', 'zao', 'zao', 'zao']
(4)len(hulu1)
7
len(hulu3)
15
(5)hulu1.insert(3, 'xxx')
hulu1
['zha', 'zha', 'zha', 'xxx', 'zha', 'zao', 'zao', 'zao']
(6)hulu1.remove(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
hulu1.remove('xxx')
hulu1
['zha', 'zha', 'zha', 'zha', 'zao', 'zao', 'zao']
(7)hulu1.pop()
'zao'
hulu1
['zha', 'zha', 'zha', 'zha', 'zao', 'zao']
hulu1.pop()
'zao'
hulu1
['zha', 'zha', 'zha', 'zha', 'zao']
(8)hulu1.insert(2, 'yyy')
hulu1
['zha', 'zha', 'yyy', 'zha', 'zha', 'zao']
hulu1.pop(2)
'yyy'
hulu1
['zha', 'zha', 'zha', 'zha', 'zao']
y in hulu1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
'yyy' in hulu1
False
'zha' in hulu1
True
hulu1
['zha', 'zha', 'zha', 'zha', 'zao']
hulu1.sort()
hulu1
['zao', 'zha', 'zha', 'zha', 'zha']
s=[5,2,6,8,34,7,8]
s.sort()
s
[2, 5, 6, 7, 8, 8, 34]
s=[5,2,6,8,34,7,8,'a1','b5', 'a6','b2','a3']
s.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
s
[2, 5, 6, 7, 8, 8, 34, 'a1', 'b5', 'a6', 'b2', 'a3']
s=[5,2,6,8,34,7,8,'am','bw', 'af','bs','an']
s.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
s=['am','bw', 'af','bs','an']
s.sort()
s
['af', 'am', 'an', 'bs', 'bw']
s[1]
'am'
s[3]
'bs'
s[3:]
['bs', 'bw']
s[:2]
['af', 'am']
s[:]
['af', 'am', 'an', 'bs', 'bw']
s[::2]
['af', 'an', 'bw']
s[::-1]
['bw', 'bs', 'an', 'am', 'af']
s='asdfghjk'
s[::-1]
'kjhgfdsa'
s[:5]
'asdfg'
s[3:]
'fghjk'
s[::3]
'afj'
字典
python的dict这种数据结构可以直接理解为字典,给你一个词,这个词在python的字典里叫做key,键,用这个词可以找到它相关的意思或者说具体内容,这个内容在python的字典里,叫做key的值或者value,或简单叫作v。
dict用大括号表示,里面用英文的逗号分隔多个组,用冒号隔开每一组的key和v
特点与操作
1. dict的特点:
(1)key是不可变的,很简单去理解,查单词的时候,如果查到一半这个词自己变了,那肯定查的就是别的词儿了。这个key的类型可以是int,float,或是string。你可以理解用目录的页面编号去查找某一页,或者用一个单词去查她的意思。
(2)字典默认是无序的。因为字典只是一堆kv的集合,相当于一个大书包,各种书随便丢在里面了。排序的问题以后再说。
2. dict的常用操作:
help(dict) # 查看帮助,浏览全局
dir(dict) # 查看有哪些方法
(1){'k':'v'}, dict(zip(list_k, list_v))
: 创建方法(使用kv或者zip)
d={'k':2,'x':"ttt"} # 用大括号建立字典
d
>>> {'x': 'ttt', 'k': 2}
list_k=[1,2,'n']
list_v=['hello','python','hhhh']
d=dict(zip(list_k, list_v)) # 用zip和kv的列表建立字典
d
>>>{1: 'hello', 2: 'python', 'n': 'hhhh'}
(2)d['k'],d.get('k')
: 获取元素(直接中括号里用k或get方法)
d['1'] # 用不存在的k会报错
>>>Traceback (most recent call last): File "<stdin>", line 1, in <module>KeyError: '1'
d[1]
>>>'hello'
d['n'] = 'happy' # 更新key的值
d
>>>{1: 'hello', 2: 'python', 'n': 'happy'}
d.get('n') # 用get获取
>>>'nb'
>>> d.get('m') # 没有k的时候为空
>>> d.get('m', 'yyy') # 取不到时候设置默认的值
'yyy'
(3)'k' in d
: 检测k是否存在
'm' in d # 判断是否存在k
>>> False
'n' in d
>>> True
(4)d.keys()
: 获取所有的k
d.keys()
>>>dict_keys([1, 2, 'k'])
(5)d.values()
: 获取所有的值
d.values()
>>>dict_values(['hello', 'python', 'tttt'])
(6)del d['k']
: 删除k
del d['n'] # 删除k
d
>>>{1: 'hello', 2: 'python'}
d['k']='tttt' # 直接添加k和v到字典,k之前可不存在
d
>>>{1: 'hello', 2: 'python', 'k': 'tttt'}
(7)d1.update(d2)
: 更新值,同k被覆盖
dict[1]='aaaaaaa'
dict[2]='bbbbbbb'
d1 d2
>>>>>{1: 'aaaaaaa', 2: 'bbbbbbbb'}
>>> d2["k2"]="yyyy"
>>> d2
{2: 'sdfsdf', 4: 'sdfsdf', 'k2': 'yyyy'}
>>> d
{1: 'hello', 2: 'python', 'k': 'tttt'}
d.update(d2) # 更新,相同的k会被覆盖