day7

一、列表推导式

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': '小明'}
  • 字典转列表取出键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值