如何从集合中获取列表?
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]
>>>
【讨论】:
以上是关于如何从集合中获取列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 从 Firebase 中的两个集合中获取数据
如何从 firestore 两个集合中获取数据并将所有数据合并在一起