আমি একটি মানদণ্ড চালিয়েছি এবং sorted(lst, reverse=True) == lst
দীর্ঘ তালিকার all(l[i] >= l[i+1] for i in xrange(len(l)-1))
জন্য দ্রুততম ছিলাম , এবং সংক্ষিপ্ত তালিকার পক্ষে দ্রুততম । এই মানদণ্ডগুলি একটি ম্যাকবুক প্রো 2010 13 "(কোর 2 ডুও 2.66GHz, 4 জিবি 1067MHz ডিডিআর 3 র্যাম, ম্যাক ওএস এক্স 10.6.5) এ চালিত হয়েছিল।
আপডেট: আমি স্ক্রিপ্টটি সংশোধন করেছি যাতে আপনি এটি সরাসরি আপনার নিজের সিস্টেমে চালাতে পারেন। পূর্ববর্তী সংস্করণে বাগ রয়েছে। এছাড়াও, আমি বাছাই করা এবং অরসেটেড উভয় ইনপুট যুক্ত করেছি।
- সংক্ষিপ্ত বাছাই করা তালিকার জন্য সেরা:
all(l[i] >= l[i+1] for i in xrange(len(l)-1))
- দীর্ঘ বাছাই করা তালিকার জন্য সেরা:
sorted(l, reverse=True) == l
- সংক্ষিপ্ত তালিকাভুক্ত তালিকার জন্য সেরা:
all(l[i] >= l[i+1] for i in xrange(len(l)-1))
- দীর্ঘতর সাজানো তালিকার জন্য সেরা:
all(l[i] >= l[i+1] for i in xrange(len(l)-1))
সুতরাং বেশিরভাগ ক্ষেত্রেই স্পষ্ট বিজয়ী থাকে।
আপডেট: আরোনস্টার্লিংয়ের উত্তরগুলি (# 6 এবং # 7) আসলে সব ক্ষেত্রেই দ্রুত। # 7 দ্রুততম কারণ এটিতে কীটি দেখার জন্য ইন্ডায়ারেশনের একটি স্তর নেই।
#!/usr/bin/env python
import itertools
import time
def benchmark(f, *args):
t1 = time.time()
for i in xrange(1000000):
f(*args)
t2 = time.time()
return t2-t1
L1 = range(4, 0, -1)
L2 = range(100, 0, -1)
L3 = range(0, 4)
L4 = range(0, 100)
# 1.
def isNonIncreasing(l, key=lambda x,y: x >= y):
return all(key(l[i],l[i+1]) for i in xrange(len(l)-1))
print benchmark(isNonIncreasing, L1) # 2.47253704071
print benchmark(isNonIncreasing, L2) # 34.5398209095
print benchmark(isNonIncreasing, L3) # 2.1916718483
print benchmark(isNonIncreasing, L4) # 2.19576501846
# 2.
def isNonIncreasing(l):
return all(l[i] >= l[i+1] for i in xrange(len(l)-1))
print benchmark(isNonIncreasing, L1) # 1.86919999123
print benchmark(isNonIncreasing, L2) # 21.8603689671
print benchmark(isNonIncreasing, L3) # 1.95684289932
print benchmark(isNonIncreasing, L4) # 1.95272517204
# 3.
def isNonIncreasing(l, key=lambda x,y: x >= y):
return all(key(a,b) for (a,b) in itertools.izip(l[:-1],l[1:]))
print benchmark(isNonIncreasing, L1) # 2.65468883514
print benchmark(isNonIncreasing, L2) # 29.7504849434
print benchmark(isNonIncreasing, L3) # 2.78062295914
print benchmark(isNonIncreasing, L4) # 3.73436689377
# 4.
def isNonIncreasing(l):
return all(a >= b for (a,b) in itertools.izip(l[:-1],l[1:]))
print benchmark(isNonIncreasing, L1) # 2.06947803497
print benchmark(isNonIncreasing, L2) # 15.6351969242
print benchmark(isNonIncreasing, L3) # 2.45671010017
print benchmark(isNonIncreasing, L4) # 3.48461818695
# 5.
def isNonIncreasing(l):
return sorted(l, reverse=True) == l
print benchmark(isNonIncreasing, L1) # 2.01579380035
print benchmark(isNonIncreasing, L2) # 5.44593787193
print benchmark(isNonIncreasing, L3) # 2.01813793182
print benchmark(isNonIncreasing, L4) # 4.97615599632
# 6.
def isNonIncreasing(l, key=lambda x, y: x >= y):
for i, el in enumerate(l[1:]):
if key(el, l[i-1]):
return False
return True
print benchmark(isNonIncreasing, L1) # 1.06842684746
print benchmark(isNonIncreasing, L2) # 1.67291283607
print benchmark(isNonIncreasing, L3) # 1.39491200447
print benchmark(isNonIncreasing, L4) # 1.80557894707
# 7.
def isNonIncreasing(l):
for i, el in enumerate(l[1:]):
if el >= l[i-1]:
return False
return True
print benchmark(isNonIncreasing, L1) # 0.883186101913
print benchmark(isNonIncreasing, L2) # 1.42852401733
print benchmark(isNonIncreasing, L3) # 1.09229516983
print benchmark(isNonIncreasing, L4) # 1.59502696991
key
ব্যবহারের জন্য আপনি কোনও ফাংশন পাস করতে পারেন।key=lambda x, y: x < y
একটি ভাল ডিফল্ট করে তোলে।