如何从集合中获取列表?

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何从集合中获取列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 linq 从集合中获取特定集合?

如何从对象集合中获取第二个最新日期的对象

如何使用 Flutter 从 Firebase 中的两个集合中获取数据

如何从 firestore 两个集合中获取数据并将所有数据合并在一起

如何在Flutter的firebase中获取集合中索引的集合列表? [复制]

如何在c#中将数据添加到集合列表中[重复]