一、列表推导式
1.序列变换成列表
# 字符串转列表
str1 = 'abc'
list1 = [x for x in str1]
print(list1)
# 取出列表中的数的个位数
nums = [10, 245, 89]
list2 = [x % 10 for x in nums]
2.筛选(提取有效或删除无效)
# 筛选大于等于60的数
num = [3, 50, 60, 80, 90, 66]
new_num = [x for x in num if x >=60]
3.不统一的变幻
# 所有数字乘10,其他不变
list4 = [19, 'abc', 98, 'cd', 50]
list5 = [x*10 if type(x) == int else x for x in list4]
二、列表的加法和乘法
1.列表1 + 列表2 - 合并两个列表产生一个新的列表
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c) # [1, 2, 3, 4, 5, 6]
2.列表 * 整数 - 列表中的元素重复N次产生一个新列表
a = [1]
print(a * 2) # [1,1]
3.比较运算
1)比较相等:==、!=
# 元素顺序不同的两个列表不相等
print([1, 2] == [1, 2]) # True
print([2, 1] == [1, 2]) # false
# 两个类型不同可以判断,只是结果一定是False
print([1, 2] == '[1, 2]') # False
# is的用法
# is的实质是判断两个数据的地址是否一样
# 可变数据地址不同,相同的不可变数据地址相同
print(2 is 2) # True
print('you' is 'you') # True
print([1, 2] is [1, 2]) # False
list1 = [1, 2]
list2 = list1
print(list1 is list2) # True
结论1:用数据给变量赋值的时候,如果数据是不可变的,那么会复用前面存储的值。
- 如果数据可变,不管之前有没有存储过,都会重新开辟新的内存空间。
- id(变量) - 获取变量中保存的数据在内存空间中的地址
# 数字不可变
a = 100
b = 100
print(id(a), id(b)) # 地址打印出相同
# 列表可变
a = [10, 20]
b = [10, 20]
print(id(a), id(b)) # 地址不同
# 元祖不可变
# 字典可变
结论2:如果用一个变量给另外一个变量赋值,是让新变量保存原变量的地址。(不会开辟新空间保存数据)
a = [1, 2]
b = a
print(id(a), id(b)) # 打印的地址相同
结论3: python 中所有变量都是指针变量。(变量保存数据的时候其实是保存数据在内存中储存的地址)
三、列表相关函数和方法
1.相关函数
- max、min、sum、sorted、len、list
1)max和min
- max(序列) - 返回序列中元素的最大值
- min(序列) - 返回序列中元素的最小值
nums = [90, 80, 55, 66]
print(max(nums)) # 90
2)sum
- sum(序列) - 求序列中所有元素的和(序列中的元素只能是数字)
nums = [90, 80, 55, 66]
print(sum(nums))
print(sum(range(101)))
3) sorted
- sorted(序列) - 将序列中的元素从小到大排序(升序),以列表的形式返回
- sorted(序列,revers=True) - 将序列中的元素从大到小排序(降序),以列表的形式返回
nums = [90, 80, 55, 66]
new_nums = sorted(nums)
print(new_nums) # [55, 66, 80, 90]
new_nums = sorted(nums, reverse = True)
print(new_nums) # [90, 80, 66, 55]
4)list
- list(序列) - 将其他序列转换成列表(任何序列都可以转换成列表)
list1 = list('abc')
print(list1) # ['a', 'b', 'c']
2.相关方法
- 列表.xxx()
1)列表.clear() - 删除列表中所有的元素
song = ['关山酒', '搁浅']
song.clear()
print(song) # []
2)列表.copy() - 返回一个和原列表长得一样的新的列表
- 列表[:],列表+[],列表*1 都可以返回一个新的长得一样的列表
song = ['关山酒', '搁浅']
song2.copy() # song和song2地址不同
3)列表.count(元素) -返回元素在列表中出现的次数
nums = [90, 80, 55, 55, 66]
print(nums.count(55))
4)列表.extend(序列) - 将序列中的元素全部添加到列表中
song = ['关山酒', '搁浅']
song.extend(['七里香', '简单爱'])
print(song) # ['关山酒', '搁浅', '七里香', '简单爱']
song.extend(range(1, 4))
print(song) # ['关山酒', '搁浅', '七里香', '简单爱', 1, 2, 3]
5)列表.index(元素) - 返回元素在列表中的下标(这儿的下标从0开始)
- 如果元素在列表里有多个,只会获取最前面那个元素的下标
- 如果元素不存在程序会报错
song = ['关山酒', '搁浅']
print(song.index('关山酒')) # 0
6)列表.reverse - 列表逆序
song = ['关山酒', '搁浅', '七里香', '简单爱']
song.revers()
7)列表.sort() - 不会产生新的列表,修改原列表中的顺序
- 可以列表.sort(revers = True)使列表降序
nums = [90, 80, 55, 55, 66]
nums.sort()
print(nums) # [55, 55, 66, 80, 90]
四、字典
1.什么是字典(dict)
- 字典是容器型数据类型,将{}作为容器的标志,里面多个元素(元素都是键值对)用逗号隔开,{键1:值1,键2:值2…}
- 注意:字典保存数据其实想要保存的是值,键的作用是对值进行区分和说明的。
- 字典可变(支持增删改);字典是无序的(不支持下标操作)
- 字典的元素 - 必须是键值对
- 键 - 不可变的数据(一般使用字符串)、唯一的
- 值 - 任何类型数据都可作为值,可重复
dict1 = { } # 空字典
# 不可变的数据才能作为键
dict2 = {10.2: 100,'abc': 100,(10 ,20):100}
2.字典的增删改查
1)查 - 获取字典的值
- 获取单个值:
字典[key] - 获取字典中指定key的值,如果查询的键不存在,会报错
字典.get(key) - 获取字典中指定key的值 ,如果查询的键不存在,会返回None
字典.get(key,默认值)
film = {'name': '肖胜克的救赎', 'director':'弗兰克', 'time': '1994'}
print(film['name']) # 肖胜克的救赎
print(film['abc']) # 报错
print(film.get('name')) # 肖胜克的救赎
print(film.get('abc')) # None
-
遍历:
-
for-in 遍历字典的时候,变量取到的是字典的键
film = {'name': '肖胜克的救赎', 'director':'弗兰克', 'time': '1994'}
for x in film:
print(x, film[x])
# 练习:定义一个变量保存一个班所有的学生信息,每个学生中包含姓名、年龄、性别、电话号码
# 1)计算这个这个班的学生的平均年龄
# 2)统计班级中女生的个数
# 方法一:
students = [
{'name': 'stu1', 'age': 18, 'gender': '男', 'tel': '1101'},
{'name': 'stu2', 'age': 22, 'gender': '女', 'tel': '1104'},
{'name': 'stu3', 'age': 30, 'gender': '女', 'tel': '1102'},
{'name': 'stu4', 'age': 23, 'gender': '男', 'tel': '1106'},
{'name': 'stu5', 'age': 24, 'gender': '男', 'tel': '1109'},
{'name': 'stu6', 'age': 16, 'gender': '女', 'tel': '1100'}
]
age1 = 0
count = 0
for x in students:
if x['gender'] == '女':
count += 1
age1 += x['age']
average_age = age1 // len(students)
print('班级平均年龄为:', average_age, '女生个数为:', count)
# 方法二:
avg_age = sum([x['age'] for x in students]) / len(students)
print(avg_age)
result = [x['gender'] for x in students].count('女')
print(result)
2)增、改
- 字典[key] = 值 - 当key存在的时候就是修改,当key不存在的时候就是增加
computer = {'prince': 5000}
print()
computer['color'] = '黑色'
print(computer) # {'prince': 5000, 'color': '黑色'}
computer['prince'] = 4000
print(computer) # {'prince': 4000, 'color': '黑色'}
3)删
- del 字典[key] - 删除字典中指定key对应的键值对
computer = {'prince': 5000, 'color': '黑色'}
del computer['prince']
print(computer) # {'color': '黑色'}
- 字典.pop(key) - 取出字典中指定key对应的值
computer = {'prince': 5000, 'color': '黑色'}
prince = computer.pop('prince')
print(computer, prince) # {'color': '黑色'} 5000
3.字典的相关操作和方法
1)in 和not in 操作
- 字典的in和not in判断的是某个key是否存在
dict1 = {'a': 10, 'b': 20}
print(10 in dict1) # False
print('a' in dict1) # True
2)max、min、sum、sorted(了解) - 只针对字典的key
3) dict
-
dict(序列) - 将序列转化为字典
-
序列的要求:
a.序列中每个元素都是小序列
b.小序列有且只有两个元素
c.小序列的第一个元素不可变
seq = ['ab', '12']
seq1 = [range(2), ['name', '小明']]
print(dict(seq)) # {'a': 'b', '1': '2'}
print(dict(seq1)) # {0: 1, 'name': '小明'}
- 字典转列表取出键
2271

被折叠的 条评论
为什么被折叠?



