如何仅使用一个元素创建Python集?

时间:2013-11-14 18:11:32

标签: python python-3.x set

如果我有一个字符串,并且想要创建一个最初只包含 该字符串的集合,那么是否有比以下更多的Pythonic方法?

mySet = set()
mySet.add(myString)

下面给出了myString中的一组字母:

mySet = set(myString)

6 个答案:

答案 0 :(得分:40)

在2.7和3.x中,您可以使用:

mySet = {'abc'}

答案 1 :(得分:19)

例如,这种简单的方法:

mySet = set([myString])

答案 2 :(得分:6)

For Python2.7+

set_display ::=  "{" (expression_list | comprehension) "}"

示例:

>>> myString = 'foobar'
>>> s = {myString}
>>> s
set(['foobar'])

>>> s = {'spam'}
>>> s
set(['spam'])

请注意,空 {} 不是set,而是dict

set的帮助:

class set(object)
 |  set() -> new empty set object
 |  set(iterable) -> new set object

正如您所看到的,set()期望迭代和字符串也是可迭代的,因此它将字符串字符转换为集合。

将字符串放入一些可迭代的字符串并将其传递给set()

>>> set(('foo',))  #tuple
set(['foo'])
>>> set(['foo'])   #list
set(['foo'])

答案 3 :(得分:1)

set(obj)将通过obj迭代,并将所有唯一元素添加到集合中。由于字符串也是可迭代的,如果您将字符串传递给set(),那么您将获得集合中的唯一字母。你可以先把你的obj放到一个列表中:

set(["mystring"])

然而,这并不是优雅的IMO。你知道,即使是创建一个空字典,我们也更喜欢{}而不是dict()。同样在这里。我wolud使用以下语法:

myset = {"mystring"}

请注意,对于元组,您需要一个逗号:

mytuple = ("mystring",)

答案 4 :(得分:0)

如果该集合也不太可能发生变化,请考虑使用frozenset

mySet = frozenset([myString])

答案 5 :(得分:0)

使用mySet = {mystring}

 Python 3.6.9 (default, Sep 24 2019, 14:35:19)                                                                                             
 Type 'copyright', 'credits' or 'license' for more information                                                                             
 IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.                                                                       

 In [1]: def s(i):                                                                                                                         
     ...:     r = set()                                                                                                                     
     ...:     r.add(i)                                                                                                                      
     ...:     return r                                                                                                                      
     ...:                                                                                                                                   

 In [2]: %timeit s(1234)                                                                                                                   
  218 ns ± 5.99 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)                                                                

 In [3]: %timeit set([1234])                                                                                                               
  201 ns ± 3 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)                                                                  

 In [4]: %timeit {1234}                                                                                                                    
  51.7 ns ± 1.7 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)