鱼C论坛

 找回密码
 立即注册
查看: 1721|回复: 7

[已解决]Python47讲迭代器测试题5中的set数据结构是什么概念?

[复制链接]
发表于 2021-4-11 09:55:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大佬:
5. 在 Python 原生支持的数据结构中,你知道哪一个是只能用迭代器访问的吗?7DsUFS);
pZ10'iJ7YB2.#"X+DsU<RG
答:set。对于原生支持随机访问的数据结构(如tuple、list),可以使用迭代器或者下标索引的形式访问,但对于无法随机访问的数据结构 set 而言,迭代器是唯一的访问元素的方式。

我的印象中, set都是和设置、赋值等语句联系在一起的,现在怎么又和tuple,list 放在一起了? set数据结构是个啥东东?
最佳答案
2021-4-11 10:08:39
本帖最后由 柿子饼同学 于 2021-4-11 10:10 编辑
darchir 发表于 2021-4-11 10:06
能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?

  1. >>> a = {1, 2, 3, 4, 5}
  2. >>> a[0]
  3. Traceback (most recent call last):
  4.   File "<pyshell#1>", line 1, in <module>
  5.     a[0]
  6. TypeError: 'set' object is not subscriptable
  7. >>> for i in a:
  8.         print(i)

  9. 1
  10. 2
  11. 3
  12. 4
  13. 5
  14. >>> type(a)
  15. <class 'set'>
  16. >>>
复制代码

你看看,集合不能用下标访问,只能用循环或者迭代器
  1. >>> s = iter(a)
  2. >>> next(s)
  3. 1
  4. >>> next(s)
  5. 2
  6. >>> next(s)
  7. 3
  8. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-11 09:58:03 | 显示全部楼层
set 就是集合的意思
和你必修一学的集合差不多一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 10:03:14 | 显示全部楼层
set是集合
跟tuple,list放在一起,是因为他们都属于容器

  1. a = [1,2,3]
  2. b = (1,2,3)
  3. c = {1,2,3}
复制代码


现在定义三个容器a、b、c,都装有1、2、3三个元素

我们可以通过a[0],b[0]这样的切片方式来拿到我们想要的元素

但是因为集合具有无序性,我们尝试对c进行切片的话,会引发 TypeError

  1. >>> c[0]
  2. Traceback (most recent call last):
  3.   File "<pyshell#0>", line 1, in <module>
  4.     c[0]
  5. TypeError: 'set' object is not subscriptable
复制代码


我们想要访问set中的元素只能通过迭代器访问

  1. >>> for each in c:
  2.         print(each)

  3.        
  4. 1
  5. 2
  6. 3
复制代码

  1. >>> c_iter = iter(c)
  2. >>> next(c_iter)
  3. 1
  4. >>> next(c_iter)
  5. 2
  6. >>> next(c_iter)
  7. 3
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 10:06:10 | 显示全部楼层
柿子饼同学 发表于 2021-4-11 09:58
set 就是集合的意思
和你必修一学的集合差不多一样

能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-11 10:08:39 | 显示全部楼层    本楼为最佳答案   
本帖最后由 柿子饼同学 于 2021-4-11 10:10 编辑
darchir 发表于 2021-4-11 10:06
能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?

  1. >>> a = {1, 2, 3, 4, 5}
  2. >>> a[0]
  3. Traceback (most recent call last):
  4.   File "<pyshell#1>", line 1, in <module>
  5.     a[0]
  6. TypeError: 'set' object is not subscriptable
  7. >>> for i in a:
  8.         print(i)

  9. 1
  10. 2
  11. 3
  12. 4
  13. 5
  14. >>> type(a)
  15. <class 'set'>
  16. >>>
复制代码

你看看,集合不能用下标访问,只能用循环或者迭代器
  1. >>> s = iter(a)
  2. >>> next(s)
  3. 1
  4. >>> next(s)
  5. 2
  6. >>> next(s)
  7. 3
  8. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-11 10:14:34 | 显示全部楼层
darchir 发表于 2021-4-11 10:06
能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?

集合具有互异性,里面不能有重复的元素
  1. >>> a = {1, 2, 2, 2, 3, 4}
  2. >>> a
  3. {1, 2, 3, 4}
复制代码

集合具有无序性,里面元素的顺序可以颠倒
  1. >>> a = {1, 2, 3}
  2. >>> b = {3, 2, 1}
  3. >>> a == b
  4. True
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-11 10:52:51 | 显示全部楼层
darchir 发表于 2021-4-11 10:06
能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?

有下标,就意味着有顺序。那就和列表没啥区别了,那设计set集合这个类型,就有点多余了。

一种种数据结构/类型 之间,都是有特定区分度,有其各自特点的,也是为了专门处理它们合适的场景。

知道 列表、元组、集合 三者都是“容器”,有各自的不同特点,知道怎样用就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-11 19:49:52 | 显示全部楼层
跟你们混,真是涨知识啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-7 11:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表