1.recover
列表元素的要求:任何类型的数据都可以作为列表元素
name = '张三'
list1 = ['12', 'abc', 3, True, max('abc')]
print(list1[-1])
补充: == 和 is
==: 判断2个数据的值是否相等.
is: 判断地址是否相等
python数据存储:
- 给变量赋值的时候,如果数据的类型是数字或者字符串,不会直接开辟空间存储数据而是先再内存数字字符串对应的缓存区,查看是否已经存储过对应的数据,
如果已经存了,直接将之前的数据对应的地址赋予变量. 如果没有存储才会开辟空间储存数据, 其他类型的数据,都是直接开辟空间存储数据,然后再把地址返回.
2.容器类型中的元素,在容器中不是直接存的值,而是元素值对应的地址.
具体关系如下图:
QQ图片20181113101259.png
2. 列表相关方法
2.1 列表赋值
a. 直接使用一个列表变量给另一个列表变量赋值,赋的是地址.赋玩值之后,对其中一个列表进行增删改,会影响另一个列表
list1 =[1, 2, 3]
list2 = list1
list1.append(100)
print(list2)
b. 如果赋值的时候赋的列表的切片或者拷贝,会产生新的地址,然后使用新的地址赋值,赋值完只含,两个列表之间不影响.
list1 =[1, 2, 3]
list2 = list1[:]
list1.append(100)
print(list2)
2.2. 列表中的方法
2.2.1. 列表.count(元素) - 获取指定元素在列表中出现的次数.
numbers = [100, 34, 90, 89, 100, 7, 100]
print(numbers.count(100))
2.2.2. 列表.extend(序列) - 将序列中所有的元素都添加列表中
list1 = []
list1.extend(range(1,19))
print(list1)
2.2.3. 列表.index - 获取指定元素的下标
注意: a.如果元素有多个,只取一个的下标 b. 如果这个元素不存在,会报错
2.2.4 列表.reverse() - 反向列表(将列表元素倒叙)
numbers = [100, 34, 90, 89, 100, 7, 100]
numbers.reverse()
print(numbers)
2.2.5 列表.sort - 对列表进行升序排列(从小到大)
列表.sort(reverse=True) - 对列表进行降序排列(从大到小)
注意: 列表的要求:a.列表的元素类型必须一样 b. 元素支持比较运算符
numbers = [100, 34, 90, 89, 100, 7, 100]
numbers.sort()
print(numbers)
numbers.sort(reverse = True)
print(numbers)
2.2.6. 列表.clear() - 清空列表
names = ['路飞', '娜美', '山治', '罗宾', '弗兰克']
names.clear()
print(names)
注意:清空列表尽量使用celar()
2.2.7. 列表.copy - 将列表中元素直接赋值一份产生一个新的列表,和 列表[:]效果一样.
注意:这的拷贝是浅拷贝.
list1 = [1, 2, 3]
list2 = list1.copy()
print(list2)
print(list1 is list2)
3.浅拷贝和深拷贝
copy.copy(对象) - 浅拷贝
copy.deepcopy(对象) - 深拷贝(不会直接复制地址,而是将地址对应的值拷贝一份产生新的地址)
import copy
numbers1 = [1, 2, 3]
numbers2 =[10, 20, 30]
list1 = [numbers1, numbers2]
list2 = list1.copy()
list1.append(100)
print(list1, list2) # 不修改已有元素的操作 不影响list2
list1[0].append(100)
print(list1, list2) # 修改了已有元素的numbers1,影响了list2
4 元组
4.1 元组就是不可变的列表. (有序,不可变)
有序 - 可以通过下标获取元素
不可变 - 不支持增,删,改.(一般使用字符串作为key)
4.2 元组的字面量
通过小括号将多个元素括起,用逗号隔开.
注意:
tuple1 = (1,True, 'abc',[1, 2],1)
print(tuple1)
tuple2 = (10,)
print(tuple2)
tuple3 = 1, 2, 3, 4
print(tuple3)
a.只有一个元素的元组: 在元素后面必须加一个逗号
tuple2 = (10,)
print(tuple2)
b, 直接将多个数据用逗号隔开, 不用括号括起来, 还是一个元组值.
tuple3 = 1, 2, 3, 4
print(tuple3)
c.获取元组元素
tuple4 = 10, 20
print(tuple4[0], tuple4[1])
可以通过变量个数和元组元素个数保持一致来获取元组中的每个元素
x,y = tuple4 # x, y = 10, 20
print(x,y)
通过在变量名前面加, 获取没有的元素的剩下的元素)
tuple5 = ('余婷', 98, 90, 99)
name, *scores = tuple5
print(name, scores) # 余婷 [98, 90, 99]
4.3. 元组相关的方法: 只有列表中的count和index
5.字典
5.1.什么是字典(dict)
字典是python中内置的容器类的数据类型,可变,无序的. 字典的元素是键-值对
5.2字典的字面量:使用大括号括起来,大括号中是键-值对,多个键-值对之间用逗号隔开
键-值对 - 键:值
键(key) - 不可变的数据;唯一的
值(value) - 任何类型的数据
dict1 = {'friuts': 'apple',
'vagetables': 'tomato',}
dict2 = {'aa': 100,(1, 1): 'abc' }
dict3 = {{'a': 1}: 2} # TypeError
用一个变量/字典来存储一个学生的信息: 姓名, 年龄, 电话, 成绩, 学号
student1 = ['小明', 28, '1628312321', 30, '1923131']
student2 = {'name': '小明', 'age': 28, 'tel': '1310313','score': 30}
print(student2['name'])
使用条件
如果一个容器里面存储的数据是不同意义的数据(数据之间需要区分),就使用字典.
5.3. 字典的增删改查
5.3.1. 查(获取字典的值)
a.获取单个值
字典[key] - 获取字典中key对应的值(如果key不存在,会报错:KeyError).
字典.get(key) - 获取字典中key对应的值(如果key不存在,不会报错,并且会返回一个默认值None)
None: python中的关键字,表示一个特殊值,没有,空的意思.
b.遍历
直接遍历字典拿到的是字典中所有的key
dog1 = {'name': '旺财', 'age': 3, 'color': '黄色', 'type': '土狗'}
for key in dog1:
print(key,dog1[key])
同时获取key和value(看着方便但是性能差,内存消耗多)
for key, value in dog1.items():
print(key, value)
5.3.2. 增(添加键值对)
字典[key] = 值 - 当key不存在的时候,就是在字典中添加键-值对
dict1 = {'a':1}
dict1['b'] = 3
print(dict1)
字典1.update(序列) - 将序列中的元素转换成键值对,然后再添加到字典1中
``
注意:这儿的序列要求是能够转换成字典的序列,序列中的元素只有2个是小序列
dict1 = {'a': 100, 'b': 3}
dict1.update({'aa': 10, 'bb': 20, 'a': 'abc'})
print(dict1)
dict1.update([[1, 2],['a', 2]])
print(dict1)
dict1.update([('a', 100),('b', 200)])
print(dict1)
5.3.3. 改
字典[key] = 值 - 当key存在的时候,就是修改key对应的值
dict1 = {'a': 10, 'b': 20}
dict1['a'] = 100
print(dict1)
5.3.4. 删(删除键值对)
a.del 字典[key] - 删除字典中key对应的键值对.
person = {'name': '张三', 'age': 30, 'sex': '男'}
del person['sex']
print(person)
b. 字典.pop(key) - 取出指定的键值对
person = {'name': '张三', 'age': 30, 'sex': '男'}
del person['sex']
print(person)
删除最后一个键值对(取出最后一个键值对,以元组的形式返回)
value = person.popitem()
print(person, value)
网友评论