一、数据类型-元组tuple
一句话定义,元组是只读列表,一量创建,不可修改。只可进行查询、切片、循环操作。
>>> names = ()
>>> type(names)
<class 'tuple'>
>>> names = ("Alex","zhang",)
>>> names = ("Alex","zhang","zhao","li")
>>> names[0::2]
('Alex', 'zhao')
>>> names[0] = "Alex li"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
元组中的列表是可修改呢。只引用了列表的地址
>>> t = (1,2,3,[3,5,7])
>>> t[3]
[3, 5, 7]
>>> t[3][1] = 'Test'
>>> t
(1, 2, 3, [3, 'Test', 7])
创建一个元素的元组需要在第一个元素后面加一个","
>>> t = (1)
>>> type(t)
<class 'int'>
>>> t = (1,)
>>> type(t)
<class 'tuple'>
二、数据类型-字典dict
在复杂列表中需要查询某个值的时候,需要遍历for整个列表。在大的列表中会很慢。
字典不会因为字典太大而影响查询速度。
2.2 dict定义
{key1:value1,key2:value2}
info = {
"name" : "Alex Li",
"age" : 26
}
: 号左边是key,右边是value
dict特性
1.key-value结构
2.key必须是不可变数据类型(字符串、数字、元组),(hashtable)
3.key必须唯一
4.一个key对应的value可存放任意数据类型,可修改、可以不唯一
5.可嵌套,即value也可是dict
6.py3.7之前是无序的,3.7开始变成有序的了,(ordered_dict)
7.查询速度快,且不受dict的大小影响。
3.增删改查
创建
# 方法1
>>> info = {
"name" : "Alex Li",
"age" : 26
}
# 方法2
>>> info = dict(name="alex",age=22)
>>> info
{'name': 'alex', 'age': 22}
增
>>> info["salary"] = 5000
>>> info
{'name': 'alex', 'age': 22, 'salary': 5000}
>>>
检查式新增
向dict里新增一个key,value值,如果这个key不存在,新增。如果key不存在反回已存在这个key对应的value
info.setdedefault()
改
普通修改
>>> info
{'name': 'alex', 'age': 22, 'salary': 5000}
>>>
>>> info["name"] = "Alex Li"
>>> info
{'name': 'Alex Li', 'age': 22, 'salary': 5000}
>>>
合并修改
把另外一个dict合并进来
staff_list = {
"alex": [23, "CEO", 66000],
"黑姑娘": [24, "行政", 4000],
"xiao_yun": [22, "Student", 2000]
}
names = {
"xiao_yun": [25, "前端开发", 12000],
"Celina": [23, "UE", 9999]
}
staff_list.update(names) # 把names的每个k,v赋值给staff_list
print(staff_list)
相当于
# for k in names:
# staff_list[k] = names[k]
结果:{'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前端开发', 12000], 'Celina': [23, 'UE', 9999]}
查
>>>names = {'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前端开发', 12000], 'Celina': [23, 'UE', 9999]}
# get方法
>>> names.get("alex")
# 直取
>>> names["alex2"]
会报错,因为在这个字典中没有alex2的key
>>> names["alex"]
[23, 'CEO', 66000]
#使用get去取key的值如果没有的话也不会报错,返回None。使用直取的方式没有就会报错。
dic.keys() # 返回key
dic.values()
dic.items()
>>> names
{'alex': [23, 'CEO', 66000], '黑姑娘': [24, '行政', 4000], 'xiao_yun': [25, '前
端开发', 12000], 'Celina': [23, 'UE', 9999]}
>>> names.keys()
dict_keys(['alex', '黑姑娘', 'xiao_yun', 'Celina'])
>>> names.values()
dict_values([[23, 'CEO', 66000], [24, '行政', 4000], [25, '前端开发', 12000], [2
3, 'UE', 9999]])
>>> names.items()
dict_items([('alex', [23, 'CEO', 66000]), ('黑姑娘', [24, '行政', 4000]), ('xiao
_yun', [25, '前端开发', 12000]), ('Celina', [23, 'UE', 9999])])
删除:
names.pop("alex") #删除指定key,返回value
del names["alex"] #删除指定key,不返回value
names.popitem() #以LIFO(先进后出)的方式删除一对值,从字典的后面开始删除
names.clear() #清空dict
循环
for k in dic.keys()
for k,v in dic.items()
for k in dic #推荐用这种方式,默认是用字典的keys
for k in info:
print(k,info[k])
特殊方法
fromkeys:批量生成多个k,v的dict
>>> n = ['alex','jack','rain']
>>> dict.fromkeys(n,0) # 0可以换成其他的
{'alex': 0, 'jack': 0, 'rain': 0}
>>>
copy:浅copy,同列表的copy一样
求长度
len(info) #有多少key就有多少长度