如果我有一个字符串,并且想要创建一个最初只包含该字符串的集合,是否有比以下更 Pythonic 的方法?
mySet = set()
mySet.add(myString)
下面给了我一组字母myString
:
mySet = set(myString)
如果我有一个字符串,并且想要创建一个最初只包含该字符串的集合,是否有比以下更 Pythonic 的方法?
mySet = set()
mySet.add(myString)
下面给了我一组字母myString
:
mySet = set(myString)
在 2.7 和 3.x 中,您可以使用:
mySet = {'abc'}
例如,这种简单的方法:
mySet = set([myString])
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'])
set(obj)
将迭代槽obj
并将所有唯一元素添加到集合中。由于字符串也是可迭代的,因此如果您将字符串传递给,set()
那么您将获得集合中的唯一字母。你可以先把你的 obj 放到一个列表中:
set(["mystring"])
然而,这不是优雅的 IMO。你知道,即使是创建一个空字典,我们也更{}
喜欢dict()
. 同样在这里。我会使用以下语法:
myset = {"mystring"}
请注意,对于元组,后面需要一个逗号:
mytuple = ("mystring",)
如果集合也不太可能改变,请考虑使用frozenset
:
mySet = frozenset([myString])
采用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)