【问题标题】:If set doesn't allow mutable objects then why it allow list? [duplicate]如果 set 不允许可变对象,那么为什么它允许列表? [复制]
【发布时间】:2017-02-08 03:23:51
【问题描述】:

我正在学习 python,我倾向于一个教程,该集合不允许可变对象,所以我认为可变对象是列表?

当我尝试这个时

x = set(["Perl", "Python", "Java"])

一切正常。

当我尝试时

cities = set((("Python","Perl"), ("Paris", "Berlin", "London")))

它也可以工作,但是当我尝试这个时

citiess = set((["Python","Perl"], ["Paris", "Berlin", "London"]))

它给出错误?那么为什么它会给出错误,如果它是一个列表,那么为什么当它也有列表时第一个代码正在运行呢??

请不要重定向问题,它与“如何从列表项中构造一个集合”不同

【问题讨论】:

  • 这不是重复的
  • 列表不能是集合元素;这将失败:set().add([1,2,3])
  • @User123999 它是重复的,因为 set(["Perl", "Python", "Java"]) 实际在做什么令人困惑。它是从项目列表中构造一个集合。也许如果您将set(["Perl", "Python", "Java"]) 更改为{"Perl", "Python", "Java"} 并将set((["Python","Perl"], ["Paris", "Berlin", "London"])) 更改为{(["Python","Perl"], ["Paris", "Berlin", "London"])},您就会清楚为什么第一个有效而第二个无效。请注意,{...} 是集合文字符号。

标签: python python-2.7 python-3.x set


【解决方案1】:

集合不允许可变的元素*,但在set(["Perl", "Python", "Java"]) 中,列表不是元素。列表的元素作为新集合的元素,列表的元素是不可变的。

*特别是影响==比较的可变元素。

【讨论】:

  • 对不起,我真的是python中的菜鸟,你能不能给点时间解释一下,这会很有帮助“列表不是元素。列表的元素用作元素的新集合,并且列表的元素是不可变的。”
  • 在第一个示例中,您创建了一组三个字符串。 set() 构造函数基于作为其参数传递的任何内容创建一个集合。它遍历该列表并将其中的内容添加到您的集合中。在第二个示例中,您正在处理元组,它们是合法的集合元素。然而,在第三个中,您最终会得到一组 2 个列表,这是不允许的。
猜你喜欢
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多