min 1:
list1=[1,15,9,3,6,21,10,11]
mn = min(list1)
mn2 = min(i for i in list1 if i != mn)
print((mn,mn2))
(1, 3)
It list1=[1,1,9,3,6,21,10,11]
, , 1,3
, nsmallest 1,1
, -, .
, :
def min_two(lst):
mn1, mn2 = float("inf"),float("inf")
for ele in lst:
if ele < mn1:
mn1 = ele
continue
if ele < mn2:
mn2 = ele
return mn1, mn2
, heapq.nsmallest
:
In [34]:list1=[random.random() for j in range(10**5)]
In [35]: timeit heapq.nsmallest(2,list1)
100 loops, best of 3: 11.6 ms per loop
In [36]: timeit min_two(list1)
100 loops, best of 3: 9.01 ms per loop
In [37]: %timeit sorted(list1)[:2]
10 loops, best of 3: 42.2 ms per l
:
def min_two_dupes(lst):
mn1, mn2 = float("inf"),float("inf")
for ele in lst:
if ele < mn1:
mn1 = ele
continue
if ele < mn2 and ele != mn1:
mn2 = ele
return mn1, mn2
, :
In [48]: list1 = [12, 15, 3, 3, 6, 21, 10, 11]
In [49]: min_two_dupes(list1)
Out[49]: (3, 6)
:
In [52]: timeit min_two_dupes(list1)
100 loops, best of 3: 9.04 ms per loop