Python学习笔记 字典 & 元组 & 排序算法 & 集合

一、字典:dict

  1. 里面的元素是一个键值对: key-value
  2. key有3个特点:
    a.唯一
    b.不可变类型
    c.无序(没有下标)

1.创建字典:


# 创建空字典
d1 = {}
# 创建非空字典
# 方式一:
d2 = {"name": "坤", "age": 22, "height": 184}
print(d2)
#运行结果: {"name": "坤", "age": 22, "height": 184}
'''...................................................'''
#方式二
#dict(key=value),key是一个变量名,value是一个值
dict22 = dict(a="avvv",b="2353")
print(dict22)
dict22 = dict(a=200,b=33)
print(dict22)
#运行结果:
# {'a': 'avvv', 'b': '2353'}
# {'a': 200, 'b': 33}
'''...................................................'''
#方式三:
#dict()和zip(序列),zip表示映射
#dict(zip([key1,key2,key3....],[value1,value2,value3....]))
#注意:key的数量和value的数量可以不一致,以少的作为参考
z1 = zip([1,2],["a","b","c"])
dict23 = dict(z1)
print(dict23)
#运行结果:
# {1: 'a', 2: 'b'}

2.字典查询:

d = {"name": "坤", "age": 22, "height": 184}
print(d['name']) # 方式一
print(d.get('name')) # 方式二
key = "name" # 给key赋值查询
print(d[key])
print(d.get(key))
# print(d['sex'])  # 报错,没有key则报错
print(d.get('sex'))  # 没有key不报错,但是返回None
print(d.get('sex', "男"))  # 没有key不报错,返回默认值


3.遍历字典:

d = {"name": "蔡徐坤", "age": 22, "height": 184}

for k in d:
    print(k)  # key

# for k in d.keys():
#     print(k)  # key

for v in d.values():
    print(v)  # value

for k, v in d.items():
    print(k, v)  # key value

k = d.keys()
print(k, list(k))
# dict_keys(['name', 'age', 'height'])   ['name', 'age', 'height']

4.字典合并:


d1 = {1: 2}
d2 = {3: 4}
d1.update(d2)
# print({1:2} + {3:4})  # 错误 不可以用字典+字典的方式进行合并
print(d1)  # {1: 2, 3: 4}

5.字典的增、删、改、查:

# 增
d['sex'] = "男"
print(d)  # {'name': '蔡徐坤', 'age': 22, 'height': 184, 'sex': '男'}

# 改
d['age'] = 30
print(d)  # {'name': '蔡徐坤', 'age': 30, 'height': 184, 'sex': '男'}

# 删
d.pop('age')  # 删除指定key的元素
# d.clear()  # 清空字典
# d.popitem()  # 删除最后一项,可以认为是随机删除一项, 了解
# del d['age']
print(d)
# 查即为遍历

6.列表与字典之间的区别:

list:
1. 定义方式: [], 一般存放相同类型的数据
2. 内存相对字典较小
3. 数据量较大时, 查找所需时间越久
dict:
1. 定义方式: {}, 一般存放同一个事物的不同属性
2. 内存消耗较大
3. 数据量不管多少, 对查询速度影响不大


二、元组:tuple

元组本质上是一个不可以改变的列表

1. 元组的基本功能:

1)创建元组:

t = ()  # 空元组
t = (1,)  # 包含1个元素的元组
t = (1, 2, 3, "hello", True)
print(t, type(t))


2)元组的合并:

print((1,2) + (3,4))  # (1, 2, 3, 4)

3)元组的重复:

print((1,2,3) * 3)  # (1, 2, 3, 1, 2, 3, 1, 2, 3)

4)元组的切片:

t = (1,2,3,4,5,6)
print(t[2:5])
print(t[::-1])

5)元组的遍历:

t = (11, 22, 33)
for n in t:
    print(n)  # 元素

for i in range(len(t)):
    print(i)  # 下标

for i,n in enumerate(t):
    print(i, n)

2.元组的其他功能:

1)元组的增、删、改、查:

元组与数列不同,无法对元组中的元素进行修改

t = (11, 22, 33)
# t[0] = 9  # 报错, 不能修改

2)元组排序:

t = (3, 2, 7, 1, 9)
t2 = sorted(t)  # 升序
t2 = sorted(t, reverse=True)  # 降序
print(t2)

t = (3, 2, 7, 1, 9)
t2 = reversed(t)
print(list(t2))

3)列表和元组的转换

print(list( (1,2,3) ))  # [1, 2, 3]
print(tuple( [1,2,3] ))  # (1, 2, 3)

4)元组列表快速取值

x, y = (2, 3)
x, y = [2, 3]
print(x, y)

三、集合:set

集合的特点:

  1. 无序
  2. 唯一: 不能重复

1.创建集合:

s = {1, 2, 2, 2, 3, 4}
print(s)  # {1, 2, 3, 4}

s = set()
print(s)  # set() 空集合

2.列表去重:

l = [1, 2, 4, 4, 4, 3, 3, 2, 2, 1, 6, 7, 6]
l2 = list(set(l))
print(l2)  # [1, 2, 3, 4, 6, 7]

3.集合的遍历:

s = {11, 22, 33}
for n in s:
    print(n)

4.集合的增、删:

# 增
s.add(44)
s.update([55, 66])
print(s)
# {33, 66, 11, 44, 22, 55}

# 删
s.remove(33)
# s.discard(333)
s.clear()

print(s)

5.集合的运算:

s1 = {1, 2, 3, 4}
s2 = {3, 4, 5, 6}

print(s1 & s2)  # 交集; {3, 4}
print(s1 | s2)  # 并集; {1, 2, 3, 4, 5, 6}
print(s1 - s2)  # 差集; {1, 2}
print(s1 ^ s2)  # 对称差集;  {1, 2, 5, 6}
print(s1 > s2)  # s1包含s2; False
print(s1 < s2)  # s2包含s1; False

四、排序算法(冒泡排序 & 选择排序)

1.冒泡排序:

原理:
[9,7,6,8,5,4,3,2,1]

第1次(i=0, j=9-i-1)    [9,7,6,8,5,4,3,2,1]  => [7,6,8,5,4,3,2,1, 9]
第2次(i=1, j=9-i-1)    [7,6,8,5,4,3,2,1, 9] => [6,7,5,4,3,2,1, 8,9]
第3次(i=2, j=9-i-1)    [6,7,5,4,3,2,1, 8,9] => [6,5,4,3,2,1, 7,8,9]
第4次(i=3, j=9-i-1)    [6,5,4,3,2,1, 7,8,9] => [5,4,3,2,1, 6,7,8,9]
第5次(i=4, j=9-i-1)    [5,4,3,2,1, 6,7,8,9] => [4,3,2,1, 5,6,7,8,9]
第6次(i=5, j=9-i-1)    [4,3,2,1, 5,6,7,8,9] => [3,2,1, 4,5,6,7,8,9]
第7次(i=6, j=9-i-1)    [3,2,1, 4,5,6,7,8,9] => [2,1, 3,4,5,6,7,8,9]
第8次(i=7, j=9-i-1)    [2,1, 3,4,5,6,7,8,9] => [1, 2,3,4,5,6,7,8,9]
nums = [9,7,6,8,5,4,3,2,1]
for i in range(len(nums)-1):  # i=0,1,2,3,4,5,6,7

    for j in range(len(nums)-1-i):
        if nums[j] > nums[j+1]:
            nums[j], nums[j+1] = nums[j+1], nums[j]

print(nums)

2.选择排序:

原理:
[9,7,6,8,5,4,3,2,1]

第1次(i=0)   [9,7,6,8,5,4,3,2,1]   =>  [1, 7,6,8,5,4,3,2,9]
第2次(i=1)   [1, 7,6,8,5,4,3,2,9]  =>  [1,2, 6,8,5,4,3,7,9]
第3次(i=2)   [1,2, 6,8,5,4,3,7,9]  =>  [1,2,3, 8,5,4,6,7,9]
第4次(i=3)   [1,2,3, 8,5,4,6,7,9]  =>  [1,2,3,4, 5,8,6,7,9]
第5次(i=4)   [1,2,3,4, 5,8,6,7,9]  =>  [1,2,3,4,5, 8,6,7,9]
第6次(i=5)   [1,2,3,4,5, 8,6,7,9]  =>  [1,2,3,4,5,6, 8,7,9]
第7次(i=6)   [1,2,3,4,5,6, 8,7,9]  =>  [1,2,3,4,5,6,7, 8,9]
第8次(i=7)   [1,2,3,4,5,6,7, 8,9]  =>  [1,2,3,4,5,6,7,8, 9]
nums = [9,7,6,8,5,4,3,2,1]

for i in range(len(nums)-1):  # i=0,1,2,3,4,5,6,7

    # 求剩下数中最小数的下标
    min_index = i
    for j in range(i, len(nums)):
        if nums[j] < nums[min_index]:
            min_index = j

    # 用最小数和第i个元素交换
    nums[i], nums[min_index] = nums[min_index], nums[i]

print(nums)

五、习题

  1. 声明一个字典保存一个学生的信息,学生信息中包括:
    姓名、年龄、成绩(单科)、电话、性别(男、女、不明)
  2. 声明一个列表,在列表中保存6个学生的信息(6个(题1)中的字典)
    (1) 统计不及格学生的个数
    (2) 打印不及格学生的名字和对应的成绩
    (3) 统计未成年学生的个数
    (4) 打印手机尾号是8的学生的名字
    (5)删除性别不明的所有学生(选做)

上期习题答案:

1.给定一个列表:将列表中指定的某个元素全部删除

ages = [2, 6, 3, 10, 7, 8, 9, 2]
for i in range(0, ages.count(2)):
    ages.remove(2)

print(ages)

2.自定义一个列表,最大的与第一个元素交换,最小的与最后一个元素交换,输出列表

ages = [2, 6, 3, 1, 7, 8, 23, 2]
b = 0
# 取得最大列表中最大元素值的下标
c = ages.index(max(ages))
# 取得最小列表中最大元素值的下标
d = ages.index(min(ages))

print(ages)

# 将列表第一个元素存在b中
b = ages[0]
# 将最大元素的值赋给第一个元素
ages[0] = ages[c]
# 将b中存储的元素值赋给最大元素
ages[c] = b

# 将列表最后一个个元素存在b中
b = ages[len(ages)-1]
# 将最小元素的值赋给最后一个元素
ages[len(ages)-1] = ages[d]
# 将b中存储的元素值赋给最小元素
ages[d] = b

print(ages)

3.对称列表. 传入一个列表,元素类型与个数皆未知,返回新列表,由原列表的元素正序反序拼接而成
如传入[“One”, “Two” ,”Three”] 返回[“One”, “Two”, “Three” ,”Three” ,”Two”, “One”]

# 方法一(切片法):
b = list(map(str, input('请输入列表:').split()))
c = b[::-1]

print(b + c)

# 方法二(reverse逆置法):
b = list(map(str, input('请输入列表:').split()))
c = b.copy()
c.reverse()
print(b + c)

4.列表去重, 将下面的列表中重复的元素去除[1,1,1,3,4 ]

# 方法一:
list1 = [1,1,1,3,4 ]
list2 = []
n = len(list1)

for i in range(n):
    if list1[i] not in list2:
        list2.append(list1[i])

list1 = list2

print(list1)

#方法二:
list1 = [1,1,1,3,4 ]
list1 = list(set(list1))
print(list1)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值