【问题标题】:How to get a list from a set?如何从集合中获取列表?
【发布时间】:2011-09-18 07:55:19
【问题描述】:

如何在 Python 中以list[] 形式获取set() 的内容?

我需要这样做,因为我需要将集合保存在 Google App Engine 中,并且 Entity 属性类型可以是列表,但不能是集合。我知道我可以迭代整个事情,但似乎应该有一个捷径,或“最佳实践”的方式来做到这一点。

【问题讨论】:

  • @Franklin 我很想关闭作为一般参考chat.meta.stackoverflow.com/transcript/message/654451#654451
  • @Franklin:我在一般搜索中进行了搜索,然后我在 Stackoverflow 中发布了主题行的变体,以确保它不是骗子。这是应该在 Stackoverflow.com 上显示的信息类型
  • @Franklin:我不认为这个在谷歌上很容易找到。像“python set list”或类似的搜索将返回更一般的文档
  • @Sven Marnach 在前 10 个 google 结果中,如果您在交互式控制台中尝试,有 2 个链接可以帮助您:ircarchive.info/python/2007/5/8/76.htmldaniweb.com/software-development/python/threads/93829 但我认为这是一个边缘案例,因为文档不是真正的权威,也不是“非常”容易获得的。
  • @Sven Marnach:是的,特别是如果你只是在学习 python。您首先会看到与“set”相关的方法,例如“add()”和“update()”。当没有可用的“get_list”或“get_iterable”之类的东西时,您会感到沮丧,然后您将不知道下一步该往哪里看。

标签: python list set


【解决方案1】:
>>> s = set([1, 2, 3])
>>> list(s)
[1, 2, 3]

请注意,您获得的列表没有明确的顺序。

【讨论】:

  • 对此的解释:list 接受将用于填充列表的可迭代参数。所以set 是可迭代的,它会产生预期的效果。
【解决方案2】:

请参阅 Sven 的回答,但我会改用 sorted() 函数:这样您就可以以可预测的良好顺序获取元素(例如,您可以在之后比较列表)。

>>> s = set([1, 2, 3, 4, 5])
>>> sorted(s)
[1, 2, 3, 4, 5]

当然,set 元素必须是可排序的才能工作。您无法对复数进行排序(请参阅 gnibbler 的评论)。 在 Python 3 中,您也不能对任何具有混合数据类型的集合进行排序,例如set([1, 2, 'string']).

您可以使用sorted(s, key=str),但在这些情况下可能不值得麻烦。

【讨论】:

  • “以防万一”排序不是一个好主意。排序比调用列表效率低,但更重要的是 - 如果集合的元素不可排序怎么办?例如s=set((1+1j,2+2j,3+3j))
  • 感谢您的指出!我已经用更多信息更新了答案。
  • (据我所知,Google App Engine 实体只支持可排序的类型。如果我能以正常形式存储数据,我个人通常不关心额外的处理。。 . 无论如何,这只是在某些情况下可能有用的替代方案。☺)
  • 谢谢。排序后的结果帮助我解决了codeEval 上的一个问题。如果没有sorted,它将在一个测试用例中失败。
【解决方案3】:
>>> a = [1, 2, 3, 4, 2, 3]
>>> b = set(a)
>>> b
set([1, 2, 3, 4])
>>> c = list(b)
>>> c
[1, 2, 3, 4]
>>> 

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 2023-02-24
    • 2015-04-29
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多