如果我有一个字符串,并且想要创建一个最初只包含 该字符串的集合,那么是否有比以下更多的Pythonic方法?
mySet = set()
mySet.add(myString)
下面给出了myString
中的一组字母:
mySet = set(myString)
答案 0 :(得分:40)
在2.7和3.x中,您可以使用:
mySet = {'abc'}
答案 1 :(得分:19)
例如,这种简单的方法:
mySet = set([myString])
答案 2 :(得分:6)
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)