700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Python学习笔记 字典 元组 排序算法 集合

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

时间:2021-01-16 21:24:23

相关推荐

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

一、字典:dict

里面的元素是一个键值对: key-valuekey有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不报错,但是返回Noneprint(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) # keyfor v in d.values():print(v) # valuefor k, v in d.items():print(k, v) # key valuek = 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'] = 30print(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.创建集合:

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; Falseprint(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,7for 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 = ifor 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)

五、习题

声明一个字典保存一个学生的信息,学生信息中包括:

姓名、年龄、成绩(单科)、电话、性别(男、女、不明)声明一个列表,在列表中保存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] = bprint(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 = list2print(list1)#方法二:list1 = [1,1,1,3,4 ]list1 = list(set(list1))print(list1)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。