学习python Task 5 集合、序列 笔记

1. 集合

集合 set 中的元素为不可变类型(即可哈希),且元素不重复,无序。无法为集合创建索引和切片。集合的形式和字典类似,都是大括号形式,但集合的内部元素不是键值对。

集合的创建

(1)创建空集合只能使用s=set(),区别于字典的创建dic={}
先创建空集合,s=set(),然后通过add函数添加元素,s.add('a')
(2)直接初始化创建s={元素1, 元素2, ..., 元素n}。其中的重复元素会被自动过滤。所以,可以将列表直接用法(3)转变成集合,再变回列表,即可去掉列表中的重复元素。
(3)使用set(value)工厂函数,把列表或元组转换成集合。
示例:

a = set('abracadabra')
print(a)  
# {'r', 'b', 'd', 'c', 'a'}

b = set(("Google", "Lsgogroup", "Taobao", "Taobao"))
print(b)  
# {'Taobao', 'Lsgogroup', 'Google'}

访问集合中的值

s = set(['Google', 'Baidu', 'Taobao'])
for item in s:
    print(item)
# Baidu
# Google
# Taobao

不能用索引!错误示范:

s={'a','b','c','d'}
for i in range(len(s)):
    print(s[i])

集合的内置方法

(1)set.add(elmnt)用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
(2)set1.update(set2)用于修改当前集合(把set2更新到set1中),可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
(3)set.remove(item) 用于移除集合中的指定元素。如果元素不存在,则会发生错误。
(4)set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
(5)set.pop() 用于随机移除一个元素。返回值为该元素。
(6)数学意义上的集合操作
set.intersection(set1, set2) 返回两个集合的交集。不改变原来的集合。
set1 & set2 返回两个集合的交集。不改变原来的集合。
set.intersection_update(set1, set2) 交集,在原始的集合上移除不重叠的元素。改变原来的集合。

a = set('abracadabra')
b = set('alacazam')
print(a)  # {'r', 'a', 'c', 'b', 'd'}
print(b)  # {'c', 'a', 'l', 'm', 'z'}

c = a.intersection(b)
print(c)  # {'a', 'c'}
print(a & b)  # {'c', 'a'}
print(a)  # {'a', 'r', 'c', 'b', 'd'}

a.intersection_update(b)
print(a)  # {'a', 'c'}

set.union(set1, set2) 返回两个集合的并集。
set1 | set2 返回两个集合的并集。

set.difference(set) 返回集合的差集。
set1 - set2 返回集合的差集。
set.difference_update(set) 集合的差集,直接在原来的集合中移除元素,没有返回值。

set.symmetric_difference(set)返回集合的异或。
set1 ^ set2 返回集合的异或。
set.symmetric_difference_update(set)移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。

set1.issubset(set2)判断集合set1是不是其他集合set2包含,如果是则返回 True,否则返回 False。
set1 <= set2 判断集合是不是被其他集合包含,如果是则返回 True,否则返回 False。

set.issuperset(set)用于判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。
set1 >= set2 判断集合是不是包含其他集合,如果是则返回 True,否则返回 False。

set.isdisjoint(set) 用于判断两个集合是不是不相交,如果是返回 True,否则返回 False。

集合的转换

se = set(range(4))
li = list(se)
tu = tuple(se)
print(se, type(se))  # {0, 1, 2, 3} <class 'set'>
print(li, type(li))  # [0, 1, 2, 3] <class 'list'>
print(tu, type(tu))  # (0, 1, 2, 3) <class 'tuple'>

不可变集合

Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫 frozenset 。需要注意的是 frozenset 仍然可以进行集合操作,只是不能用带有update的方法。
frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

a = frozenset(range(10))  # 生成一个新的不可变集合
print(a)  
# frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9})
b = frozenset('lsgogroup')
print(b)  
# frozenset({'g', 's', 'p', 'r', 'u', 'o', 'l'})

练习

  1. 怎么表示只包含⼀个数字1的元组。
s = (1,)
  1. 创建一个空集合,增加 {‘x’,‘y’,‘z’} 三个元素。
s = set()
s.add('x')
s.add('y')
s.add('z')
  1. 列表[‘A’, ‘B’, ‘A’, ‘B’]去重。
a = ['A', 'B', 'A', 'B']
a = list(set(a))
  1. 求两个集合{6, 7, 8},{7, 8, 9}中不重复的元素(差集指的是两个集合交集外的部分)。
a = {6, 7, 8}
b = {7, 8, 9}
a.symmetric_difference_update(b)
  1. 求{‘A’, ‘B’, ‘C’}中元素在 {‘B’, ‘C’, ‘D’}中出现的次数。
a = {'A', 'B', 'C'}
b = {'B', 'C', 'D'}
c = a & b
print(c)
print(len(c))

2. 序列

在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。

针对序列的内置函数

  1. 转换
list(sub)
tuple(sub)
str(obj)
  1. len(obj)返回对象的长度(元素个数)。
  2. max(sub)返回序列或参数集合中的最大值;min(sub)返回最小值。
  3. sum(iterable[, s=0]) 返回序列 iterable 与可选参数 s 的总和。
  4. 排序:sorted(iterable, key=None, reverse=False) 对所有可迭代的对象进行排序操作。key 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse 排序规则,True 降序,False 升序(默认)。返回重新排序的列表
  5. reversed(seq) 函数返回一个反转的迭代器。seq 为要转换的序列,可以是 tuple, string, list 或 range。
s = 'lsgogroup'
x = reversed(s)
print(type(x))  # <class 'reversed'>
print(x)  # <reversed object at 0x000002507E8EC2C8>
print(list(x))
# ['p', 'u', 'o', 'r', 'g', 'o', 'g', 's', 'l']
  1. enumerate(sequence, [start=0]) 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
a = list(enumerate(seasons))
print(a)  
# [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
for i, element in a:
    print('{0},{1}'.format(i, element))
# 0,Spring
# 1,Summer
# 2,Fall
# 3,Winter
  1. zip(iter1 [,iter2 [...]]) 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
    我们可以使用 list() 转换来输出列表。
    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8]

zipped = zip(a, b)
print(zipped)  # <zip object at 0x000000C5D89EDD88>
print(list(zipped))  # [(1, 4), (2, 5), (3, 6)]
zipped = zip(a, c)
print(list(zipped))  # [(1, 4), (2, 5), (3, 6)]

a1, a2 = zip(*zip(a, b))
print(list(a1))  # [1, 2, 3]
print(list(a2))  # [4, 5, 6]

练习

  1. 怎么找出序列中的最大、小值?
    max和min函数
  2. sort() 和 sorted() 区别?
    sort用于列表,sorted用于所有可迭代对象的排序。
  3. 怎么快速求 1 到 100 所有整数相加之和?
sum(range(1,101))
  1. 求列表 [2,3,4,5] 中每个元素的立方根。
import math
lst = [2, 3, 4, 5, 8]
l = []
for i in range(len(lst)):
    l.append(math.pow(lst[i], 1.0/3))
print(l)
  1. 将[‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。
a = ['x', 'y', 'z']
b = [1, 2, 3]
c = list(zip(a, b))
print(c)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python中的时间序列多步预测,可以使用长短期记忆网络(LSTM)来实现。LSTM是一种适用于处理序列数据的深度学习模型,它可以捕捉序列中的长期依赖关系。 在Python中,可以使用Keras库来构建和训练LSTM模型。首先,需要准备好时间序列数据,并将其转换为适合LSTM模型的输入格式。通常,可以将时间序列数据转换为监督学习问题,其中输入序列用于预测输出序列的下一个时间步。 接下来,可以使用Keras中的LSTM层来构建LSTM模型。可以指定LSTM层的神经元数量、输入序列长度和输出序列长度等参数。然后,可以将LSTM层与其他层(如全连接层)组合起来构建完整的模型。 在训练模型之前,需要将数据集划分为训练集和测试集。可以使用训练集来训练模型,并使用测试集来评估模型的性能。 在训练过程中,可以使用适当的损失函数和优化算法来最小化模型的预测误差。可以使用均方误差(MSE)作为损失函数,并使用随机梯度下降(SGD)或Adam优化算法来优化模型。 最后,可以使用训练好的模型来进行多步预测。可以将模型输入最后几个时间步的数据,然后使用模型预测未来多个时间步的值。 如果你想了解更多关于Python中使用LSTM进行时间序列多步预测的详细信息,可以参考\[1\]中提供的链接和\[2\]中提供的GitHub源码地址。这些资源将提供更具体的实现细节和示例代码。 #### 引用[.reference_title] - *1* *2* [Python时间序列LSTM预测系列学习笔记(10)-多步预测](https://blog.csdn.net/yangwohenmai1/article/details/84568633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值