63

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

mySet = set()
mySet.add(myString)

下面给了我一组字母myString

mySet = set(myString)
4

6 回答 6

66

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

mySet = {'abc'}
于 2013-11-14T18:18:55.300 回答
24

例如,这种简单的方法:

mySet = set([myString])
于 2013-11-14T18:12:35.920 回答
6

对于 Python2.7+

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

例子:

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

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

请注意,空{}不是 a set,而是 a 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'])
于 2013-11-14T18:12:39.810 回答
3

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

set(["mystring"])

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

myset = {"mystring"}

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

mytuple = ("mystring",)
于 2013-11-14T18:18:54.300 回答
0

如果集合也不太可能改变,请考虑使用frozenset

mySet = frozenset([myString])
于 2013-11-14T18:14:15.413 回答
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)
于 2020-01-24T00:07:53.587 回答