【发布时间】:2013-11-14 18:11:31
【问题描述】:
如果我有一个字符串,并且想要创建一个最初包含 仅该字符串的集合,是否有比以下更 Pythonic 的方法?
mySet = set()
mySet.add(myString)
下面是myString中的一组字母:
mySet = set(myString)
【问题讨论】:
标签: python python-3.x set
如果我有一个字符串,并且想要创建一个最初包含 仅该字符串的集合,是否有比以下更 Pythonic 的方法?
mySet = set()
mySet.add(myString)
下面是myString中的一组字母:
mySet = set(myString)
【问题讨论】:
标签: python python-3.x set
在 2.7 和 3.x 中,您可以使用:
mySet = {'abc'}
【讨论】:
x, 创建一个包含一个元素的元组 (x) - 它是一个构成元组的逗号,而不是括号。 x, 与 (x,) 相同。
例如,这个简单的方法:
mySet = set([myString])
【讨论】:
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'])
【讨论】:
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)
【讨论】: