আমার ইউজকেস None
কিছু ডিফল্ট মান দিয়ে প্রতিস্থাপন করছিল ।
@Kxr- এর ব্যবহার সহ - এখানে এখানে উপস্থাপিত এই সমস্যার দিকে আমি সময়সীমা বেঁধেছি str.count
।
পাইথনের সাথে আইপথনে টেস্ট কোড 3.8.1:
def rep1(lst, replacer = 0):
''' List comprehension, new list '''
return [item if item is not None else replacer for item in lst]
def rep2(lst, replacer = 0):
''' List comprehension, in-place '''
lst[:] = [item if item is not None else replacer for item in lst]
return lst
def rep3(lst, replacer = 0):
''' enumerate() with comparison - in-place '''
for idx, item in enumerate(lst):
if item is None:
lst[idx] = replacer
return lst
def rep4(lst, replacer = 0):
''' Using str.index + Exception, in-place '''
idx = -1
# none_amount = lst.count(None)
while True:
try:
idx = lst.index(None, idx+1)
except ValueError:
break
else:
lst[idx] = replacer
return lst
def rep5(lst, replacer = 0):
''' Using str.index + str.count, in-place '''
idx = -1
for _ in range(lst.count(None)):
idx = lst.index(None, idx+1)
lst[idx] = replacer
return lst
def rep6(lst, replacer = 0):
''' Using map, return map iterator '''
return map(lambda item: item if item is not None else replacer, lst)
def rep7(lst, replacer = 0):
''' Using map, return new list '''
return list(map(lambda item: item if item is not None else replacer, lst))
lst = [5]*10**6
# lst = [None]*10**6
%timeit rep1(lst)
%timeit rep2(lst)
%timeit rep3(lst)
%timeit rep4(lst)
%timeit rep5(lst)
%timeit rep6(lst)
%timeit rep7(lst)
আমি পাই:
26.3 ms ± 163 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
29.3 ms ± 206 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
33.8 ms ± 191 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
11.9 ms ± 37.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
11.9 ms ± 60.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
260 ns ± 1.84 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
56.5 ms ± 204 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
অভ্যন্তরীণ ব্যবহার করা str.index
যেকোন ম্যানুয়াল তুলনার তুলনায় দ্রুত।
আমি জানতাম না পরীক্ষায় 4 ব্যতিক্রমটি ব্যবহারের চেয়ে বেশি শ্রমসাধ্য হবে str.count
, পার্থক্যটি নগণ্য বলে মনে হচ্ছে।
নোট করুন যে map()
(পরীক্ষা 6) একটি পুনরাবৃত্তিকে রিটার্ন দেয় এবং প্রকৃত তালিকা দেয় না, এইভাবে পরীক্ষা 7।