集合、推导式与公共操作
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)
运行结果: