python基础-学习记录day08

93 阅读5分钟

集合、推导式与公共操作

1、集合的创建

# dic = {}
# print(dic, type(dic))
# se = set()
# print(se, type(se))

"""无序 不重复"""
s1 = {10, 20, 30, 40, 50}  # 如果我们的集合中的元素是数值类型 且属于0-9之间 会按从小到大的顺序进行排列
print(s1)  # {50, 20, 40, 10, 30}

s2 = {10, 30, 20, 10, 30, 40, 30, 50}
print(s2)  # {50, 20, 40, 10, 30}

s1 = set('12345')
print(s1)

list1 = [1, 2, 3, 5, 7, 8, 6, 9, 5, 8, 6, 5, 4, 15, 15, 16, 25, 14, 115, 4, 5, 6, 115, 116]
print(set(list1))  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 15, 16, 115, 116, 25}

2、集合的常见操作

"""add方法  只能增加不可变数据类型 不能增加可变数据类型"""

# s1 = set('123456')  # 可变的数据类型
# s1.add(6)
# print(s1)

# s1 = {10, 20}
# # s1.update(100) # 报错
# s1.update([100, 200])
# s1.update('abc')
# print(s1)

# s1 = {10, 20}
# s1.discard(10)
# print(s1)

# s1.discard(10)  # 删除的数据不存在 不会报错  而是会返回一个集合
# print(s1)

s1 = set('1234567789')
print(s1)
del_num = s1.pop()  # 随机删除
print(del_num)
print(s1)

3、公共操作

"""+合并"""
# 1. 字符串
str1 = 'aa'
str2 = 'bb'
str3 = str1 + str2
print(str3)  # aabb

# 2. 列表
list1 = [1, 2]
list2 = [10, 20]
list3 = list1 + list2
print(list3)  # [1, 2, 10, 20]

# 3. 元组
t1 = (10, 20)
t2 = (100, 200)
t3 = t1 + t2
print(t3)  # (10, 20, 100, 200)


"""*复制"""
# 1. 字符串
print('-' * 10)  # ----------

# 2. 列表
list1 = ['hello']
print(list1 * 4)  # ['hello', 'hello', 'hello', 'hello']

# 3. 元组
t1 = ('world',)
print(t1 * 4)  # ('world', 'world', 'world', 'world')


"""in或not in"""
# 1. 字符串
print('a' in 'abcd')  # True
print('a' not in 'abcd')  # False

# 2. 列表
list1 = ['a', 'b', 'c', 'd']
print('a' in list1)  # True
print('a' not in list1)  # False

# 3. 元组
t1 = ('a', 'b', 'c', 'd')
print('aa' in t1)  # False
print('aa' not in t1)  # True

4、公共方法

# a = 'abcdefg'
# b = 'bcdefg'
"""两个字符串比较acsii码值 是逐个比较 一旦出现比较结果则暂停 """
# print(max(a))  # 字符串之间的大小比较 比较的是ascii码值

# li = [1, 2, 3, 4, 5]
# print(max(li))
# print(min(li))
"""
可变与不可变数据类型

可变: 列表 字典 集合
不可变: 数值 字符串 元组
"""
# a = '123'
# print(a.replace('1', ''))
# print(a)  # 对我的a进行了操作 但是没有改变a原本的值  不可修改的

# li = [1, 2, 3]
# print(li.append(4))  # 并没有返回值
# print(li)  # 对我的li进行了操作  同时也改变了我原来li的值   可修改的
# enumerate()
# li = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# for i, j in enumerate(li):
#     print(i, j)  # 元组   第一个元素称为下标(索引)

# enumerate(可遍历对象, start=0)
# list1 = ['a', 'b', 'c', 'd', 'e']
# for i in enumerate(list1):
#     print(i)

# for index, char in enumerate(list1[1:], start=1):
#     print(f'下标是{index}, 对应的字符是{char}')
"""zip函数"""
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]
d = {'name': 'yue', 'age': 18, 'gender': 1}
# zipped = zip(a, b)
# print(zipped)
# print(list(zipped))
# zipped = zip(a, c)
# print(zipped)
# print(list(zipped))  # [(1, 4), (2, 5), (3, 6)]
# zipped = zip(c, d)
# print(list(zipped))  # [(4, 'name'), (5, 'age'), (6, 'gender')]
# x1, x2 = list(zip(*zipped))  # list(zip(*zipped)) = [(1, 2, 3), (4, 5, 6)]
# print(x1, x2)

5、容器类型转换

li = [1, 2, 3, 4, 5]
tup = (1, 2, 3, 4, 5, 3, 3, 3, 3)
se = {1, 2, 3, 4, 5}

"""
三大容器的关键字
list 列表  tuple元组  set集合
"""
print(list(tup), type(list(tup)))
print(tuple(li), type(tuple(tup)))
print(set(tup), type(set(tup)))  # 去重且无序

6、推导式

# li = []
# for i in range(1, 11):
#     li.append(i / 2)
# print(li)

# new_li = [i / 2 for i in range(1, 11)]
# print(new_li)
# li = []
# for i in range(0, 10, 2):
#     print(i, end=' ')
#     li.append(i)
# print(li)

# new_li = [i for i in range(0, 10, 2)]
# print(new_li)
# for i in range(1, 11):
#     if i % 2 == 0:
#         print(i)
#         li.append(i)
# print(li)

# li = [0, 2, 4, 6, 8]
# print(li)
# new_li = [i for i in range(1, 11) if i % 2 == 0]  # [返回的值 循环表达式 条件判断]
# print(new_li)
# dic = {i: i ** 2 for i in range(1, 6)}
# print(dic)
# list1 = ['name', 'age', 'sex']
# print(len(list1))
# list2 = ['Tom', 20, '男']
# dict1 = {list1[i]: list2[i] for i in range(len(list1))}  # i 0 1 2
# print(dict1)
# computs = {'AUC': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
# 需求:提取上述电脑数量⼤于等于200的字典数据

# count1 = {key: value for key, value in computs.items() if value >= 200}
# print(count1) # {'MBP': 268, 'DELL': 201}

# count1 = {}
# for key, value in computs.items():
#     if value >= 200:
#         count1[key] = value  # 添加键值对
# print(count1)
# setnew = {i ** 2 for i in (1, 2, 3)}
# print(setnew)
# a = {x for x in 'abracadabra' if x not in 'abc'}  # 去重
# print(a)
# a = (x for x in range(1, 10))
# print(a)
# 返回的是生成器对象
# <generator object <genexpr> at 0x7faf6ee20a50>
# 使用 tuple() 函数,可以直接将生成器对象转换成元组
# print(tuple(a))
# (1, 2, 3, 4, 5, 6, 7, 8, 9)
# print(tuple(x for x in range(1, 10)))
# (1, 2, 3, 4, 5, 6, 7, 8, 9)
"""咱们的推导式都是对可变数据类型来使用的"""
"""遍历和迭代"""
li = [1, 2, 3, 4, 5, 6, 7, 8, 9]
"""能够从一个序列中一个一个的取出元素 那么这个取值的过程我们就叫他遍历"""
"""迭代
迭代(Iteration)是指重复执行某个过程或操作,直到满足某个条件为止。
在计算机科学中,迭代通常用于处理数据结构和算法,例如循环、递归等。
简单来说,迭代就是通过反复执行某个操作来逐步逼近目标的过程。
在编程中,我们可以使用循环语句(如 for 循环、while 循环)来实现迭代。
通过迭代,我们可以遍历一个序列中的每个元素,或者对一个函数的输出进行多次调用,以获得所需的结果。
迭代是一种非常常见的编程技术,它可以帮助我们处理各种复杂的问题,并使代码更加简洁和易于理解。
"""

7、练习:请用列表推导式完成1到100内的所有奇数和

res = 0
for i in range(1, 101):
    if i % 2 != 0:
        res += i
print(res)

li1 = [j for j in range(100, 0, -1) if j % 2 == 1]
print(sum(li1))

li2 = sum([j for j in [i for i in range(1, 101, 2)]])
print(li2)

运行结果:

image.png