【问题标题】:Does converting a list to a set change the order of elements?将列表转换为集合会改变元素的顺序吗?
【发布时间】:2013-03-25 21:11:57
【问题描述】:

当我做类似的事情时:

U = [(1.0, 0.0), (0.0, 1.0)]
set(U)

它给了我:

{(0.0, 1.0), (1.0, 0.0)}

我只想将列表转换为集合。有什么帮助吗?

谢谢

【问题讨论】:

  • 这是一个元组列表。
  • “改变顺序”是指“改变顺序”吗?集合没有顺序,它们显示和/或迭代的顺序是完全任意的。
  • sets 本质上是无序的。
  • 它必须是set 还是您可以只删除重复项就可以逃脱?
  • {(0.0, 1.0), (1.0, 0.0)} 是一个集合。

标签: python list set


【解决方案1】:

套装没有顺序。字典也没有排序。如果要保留特定顺序,请使用列表。

>>> ''.join(set("abcdefg"))
'acbedgf'
>>> ''.join(set("gfedcba"))
'acbedgf'
>>> ''.join(set("1234567"))
'1325476'
>>> ''.join(set("7654321"))
'1325476'

显然,当您迭代一组 一些 类型的订单时,必须出来。但是顺序是任意顺序,不能指定。

这是我最喜欢的:

>>> {'apple', 'banana'}
{'banana', 'apple'}
>>> {'banana', 'apple'}
{'apple', 'banana'}

顺序受到哈希冲突的影响,因此它不仅取决于集合的内容,还取决于插入的顺序。但是您无法真正控制订单。

【讨论】:

  • 我认为令 OP 感到困惑的是,他们认为元组内元素的顺序已经重新排列(因为两个元组是对称的)。你可能想解释一下。
  • @jurgenreza:你知道,向 OP 解释事情比随机地打扰其他人来让他们解释会更有效率。无论如何,我认为你是对的。
  • 耶稣!我无意冒犯,我想既然你的答案很完整而且很好,你可能想在上面加一行。什么态度!
  • @jurgenreza:没有冒犯。但这是我的一个小问题——在 SO 上,我经常被要求扩展一个通常足够的答案,一个已经知道我所写信息的人——因为他们认为完全其他人可能 不明白一些关键点。这个人似乎总是知识渊博,可以自己扩展答案,但总是要求我这样做。所以:没有伤害,只是以后不要提出这样的要求。
  • 好的,我明白你的意思了。这似乎是个人喜好。我有时会得到相同类型的 cmets,并发现它们对改进我的答案很有用。
【解决方案2】:

我认为让您感到困惑的是元组的对称性质。将列表转换为集合并不会影响元组中项目的排列,而是影响元组的顺序。那是因为集合本质上是无序的。这是另一个使用非对称元组的示例。

>>> U = [(2.0, 0.0), (0.0, 1.0)]
>>> set(U)
{(0.0, 1.0), (2.0, 0.0)}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多