giữa thực hiện một tuple và làm cho một iterator, nó gần như là một rửa, nhưng chiến thắng lặp bởi một mũi ...:
$ 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
Không chắc lý do tại sao tất cả các câu trả lời được bằng cách sử dụng cú pháp cũ iter(x).next()
chứ không phải là mới next(iter(x))
, mà có vẻ thích hợp hơn với tôi (và cũng hoạt động trong Python 3.1).
Tuy nhiên, chiến thắng giải nén tay xuống trên cả hai:
$ 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
Điều này tất nhiên là dành cho bộ đơn hàng (nơi các hình thức thứ hai, như những người khác đã đề cập, có lợi thế là thất bại nhanh chóng nếu các thiết lập bạn "biết" chỉ có một mục thực sự có một số). Đối với bộ với tùy mục N> 1, tuple chậm lại, iter không:
$ 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
Vì vậy, giải nén đối với trường hợp singleton, và next(iter(x))
đối với trường hợp chung, dường như tốt nhất.
Very nice! Tôi thích rằng điều này thất bại nếu số lượng các yếu tố không phải là 1. –
@Laurence: Đó là một quan sát tốt. Bắt lỗi sớm, phải không? – u0b34a0f6ae
Hoặc, nếu bạn muốn giả vờ Python có một toán tử thích hợp cho công việc (đồng nghiệp của bạn sẽ ghét bạn): 'element, = myset' – rdb