Python基础入门:集合与序列-Task2-阿里云天池

Python基础入门:集合与序列-Task2-阿里云天池

〇、整体的学习感受

如果打算利用 Python 来执行机器学习,那么对 Python 数据结构的了解是至关重要的,也是操作的基础。合理地使用Python数据结构能够使编程变得简单。

一、具体的学习内容

集合比较不常用(之前也没有学过),所以详细地写写

0、集合的定义

Python 中setdict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。注意,key为不可变类型。

1. 集合的创建

  • 先创建对象再加入元素。
  • 在创建空集合的时候只能使用s = set(),因为s = {}创建的是空字典。
  • 直接把一堆元素用花括号括起来{元素1, 元素2, ..., 元素n}
  • 重复元素在set中会被自动被过滤——所以,用set()和list()-列表和集合相互转换,可以去掉列表中重复的元素。
  • 由于 set 存储的是无序集合,所以我们不可以为集合创建索引或执行切片(slice)操作,也没有键(keys)可用来获取集合中元素的值,但是可以判断一个元素是否在集合中。

2. 访问集合中的值

  • 可以使用len()內建函数得到集合的大小。
  • 可以使用for把集合中的数据一个个读取出来(简单的for循环)。
  • 可以通过innot in判断一个元素是否在集合中已经存在。

3. 集合的内置方法

  • set.add(elmnt)用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
  • set.update(set)用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
  • set.remove(item) 用于移除集合中的指定元素。如果元素不存在,则会发生错误。
  • set.discard(value) 用于移除指定的集合元素。remove() 方法在移除一个不存在的元素时会发生错误,而 discard() 方法不会。
由于 set 是无序和无重复元素的集合,所以两个或多个 set 可以做数学意义上的集合操作。
  • set.intersection(set1, set2) 返回两个集合的交集。
  • set1 & set2 返回两个集合的交集。
  • set.intersection_update(set1, set2) 交集,在原始的集合上移除不重叠的元素。
  • set.union(set1, set2) 返回两个集合的并集。
  • set1 | set2 返回两个集合的并集。
  • set.difference(set) 返回集合的差集。
  • set1 - set2 返回集合的差集。
  • set.difference_update(set) 集合的差集,直接在原来的集合中移除元素,没有返回值。
  • 当然,还有异或、包含、相交等逻辑运算,由于不是很常用,所以在此省略。

4. 集合的转换

集合可以和列表与元组之间相互转换,主要用于去除重复元素。

5. 不可变集合

Python 提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。

  • frozenset([iterable]) 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

二、学习总结

在task2的最后,总结一下序列的概念

  • 在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持一些通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
上面是教程上的理解,但与本人的理解略有出入
序列的两个主要特点是索引操作符和切片操作符:索引操作符让我们可以从序列中抓取一个特定项目。切片操作符让我们能够获取序列的一个切片,即一部分序列
所以,按照上面的内容理解,列表、元组和字符串才是序列,而集合和字典不是

首先,下标操作是用方括号中的一个数来指定一个序列的时候,Python会抓取序列中对应位置的项目。记住,Python从0开始计数。索引同样可以是负数,在那样的情况下,位置是从序列尾开始计算的。其次,切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割。注意这与索引操作符十分相似。记住数是可选的,而冒号是必须的。切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束。如果不指定第一个数,Python就从序列首开始。如果没有指定第二个数,则Python会停止在序列尾。注意,返回的序列从开始位置 开始 ,刚好在 结束 位置之前结束。即开始位置是包含在序列切片中的,而结束位置被排斥在切片外。类似地,[:]返回整个序列的拷贝。用负数做切片,从序列尾开始计算的位置。序列的神奇之处在于你可以用相同的方法访问元组、列表和字符串。还有就是zip()函数也有较多的应用。

  • zip(iter1 [,iter2 [...]])
    • 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
    • 我们可以使用 list() 转换来输出列表。
    • 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

三、建议

(纯属个人看法)
(1)有点小缺陷,序列的两个主要特点是索引操作符和切片操作符,所以在python内置的数据结构中,只有列表、元组和字符串是序列,而集合和字典不是。
(2)希望出一个列表、元组、字符串、集合和字典的特点对比表格,方便理解和记忆。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值