darchir 发表于 2021-4-11 09:55:49

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

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

我的印象中, set都是和设置、赋值等语句联系在一起的,现在怎么又和tuple,list 放在一起了? set数据结构是个啥东东?{:10_258:}

柿子饼同学 发表于 2021-4-11 09:58:03

set 就是集合的意思
和你必修一学的集合差不多一样

逃兵 发表于 2021-4-11 10:03:14

set是集合
跟tuple,list放在一起,是因为他们都属于容器

a =
b = (1,2,3)
c = {1,2,3}

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

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

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

>>> c
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
    c
TypeError: 'set' object is not subscriptable

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

>>> for each in c:
        print(each)

       
1
2
3

>>> c_iter = iter(c)
>>> next(c_iter)
1
>>> next(c_iter)
2
>>> next(c_iter)
3

darchir 发表于 2021-4-11 10:06:10

柿子饼同学 发表于 2021-4-11 09:58
set 就是集合的意思
和你必修一学的集合差不多一样

能详细讲讲吗?举个例子最好。为嘛只能用迭代器?没有下标?没下标不是也可以用 in 语句搞定吗?

柿子饼同学 发表于 2021-4-11 10:08:39

本帖最后由 柿子饼同学 于 2021-4-11 10:10 编辑

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

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

1
2
3
4
5
>>> type(a)
<class 'set'>
>>>
你看看,集合不能用下标访问,只能用循环或者迭代器>>> s = iter(a)
>>> next(s)
1
>>> next(s)
2
>>> next(s)
3
>>>

柿子饼同学 发表于 2021-4-11 10:14:34

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

集合具有互异性,里面不能有重复的元素
>>> a = {1, 2, 2, 2, 3, 4}
>>> a
{1, 2, 3, 4}
集合具有无序性,里面元素的顺序可以颠倒
>>> a = {1, 2, 3}
>>> b = {3, 2, 1}
>>> a == b
True

阿奇_o 发表于 2021-4-11 10:52:51

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

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

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

知道 列表、元组、集合 三者都是“容器”,有各自的不同特点,知道怎样用就好了。

darchir 发表于 2021-4-11 19:49:52

跟你们混,真是涨知识啊!
页: [1]
查看完整版本: Python47讲迭代器测试题5中的set数据结构是什么概念?