Usecase của tôi đã thay thế Nonebằng một số giá trị mặc định.
Tôi đã định thời các cách tiếp cận cho vấn đề này đã được trình bày ở đây, bao gồm cả phương pháp của @kxr - sử dụng str.count.
Kiểm tra mã trong ipython với Python 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)    
Tôi có:
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)
Sử dụng nội bộ str.indextrên thực tế nhanh hơn bất kỳ so sánh thủ công.
Tôi không biết nếu ngoại lệ trong thử nghiệm 4 sẽ tốn nhiều công sức hơn so với sử dụng str.count, sự khác biệt có vẻ không đáng kể.
Lưu ý rằng map()(kiểm tra 6) trả về một trình vòng lặp chứ không phải danh sách thực tế, do đó kiểm tra 7.