如何提取从单一成员在python设置的成员?(How to extract the member f

2019-09-01 01:16发布

我最近遇到的,其中,如果一组只包含一个单一的元素,我想做的事与该元素的东西的情况。 要获得元素,我看中了这个办法:

element = list(myset)[0]

但是,这不是非常令人满意,因为它创造了一个不必要的名单。 它也可以用迭代完成,但迭代似乎不自然为好,因为只有一个单一的元素。 我失去了简单的东西?

Answer 1:

元组拆包作品。

(element,) = myset

(顺便提一下,蟒蛇-dev的探索了,但拒绝加入myset.get()从一组返回的任意元素。 在这里讨论 ,吉多·范罗苏姆回答1和2 )。

我对得到一个任意元素的个人最喜欢的是(当你有一个未知的数字,但也适用,如果你只有一个):

element = next(iter(myset)) ¹

1:在Python 2.5和之前,你必须使用iter(myset).next()



Answer 2:

制作一个元组,使一个迭代器之间,它由鼻子几乎一洗,但迭代胜...:

$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=tuple(x)[0]'
1000000 loops, best of 3: 0.465 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a=next(iter(x))'
1000000 loops, best of 3: 0.456 usec per loop

不知道为什么所有的答案是使用较旧的语法iter(x).next()而不是新的next(iter(x))这似乎最好给我(和在Python 3.1的作品)。

然而,拆包战胜双手向下:

$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop
$ python2.6 -mtimeit -s'x=set([1])' 'a,=x'
10000000 loops, best of 3: 0.174 usec per loop

这当然是单项目集(其中后一种形式,如其他人所说,有没有快,如果你“知道”的组刚一项目其实有数的优势)。 对于套具有任意N> 1项,元组减慢,ITER不会:

$ python2.6 -mtimeit -s'x=set(range(99))' 'a=next(iter(x))'
1000000 loops, best of 3: 0.417 usec per loop
$ python2.6 -mtimeit -s'x=set(range(99))' 'a=tuple(x)[0]'
100000 loops, best of 3: 3.12 usec per loop

因此,拆包单例的情况下,和next(iter(x))对于一般情况下,似乎最好的。



Answer 3:

我认为kaizer.se的答案是伟大的。 但是,如果你的设置可能包含多个元素,你想要一个不那么任意元素,你可能想使用minmax 。 例如:

element = min(myset)

要么:

element = max(myset)

(不要使用sorted ,因为有这种用法不必要的开销。)



Answer 4:

我建议:

element = myset.pop()


Answer 5:

可以使用element = tuple(myset)[0]其是多一点高效,或者,可以执行类似

element = iter(myset).next()

我想构建一个迭代器比构建一个元组/列表更有效。



文章来源: How to extract the member from single-member set in python?
标签: python set