Các câu trả lời cho câu hỏi cũ nhưng có liên quan này rất khác nhau về tốc độ.
Các giải pháp nhanh nhất được đăng bởi KXR.fastest of the solution posted by kxr.
Tuy nhiên, điều này thậm chí còn nhanh hơn và nếu không thì không phải ở đây:faster and otherwise not here:
def f1[arr, find, replace]:
# fast and readable
base=0
for cnt in range[arr.count[find]]:
offset=arr.index[find, base]
arr[offset]=replace
base=offset+1
Đây là thời gian cho các giải pháp khác nhau. Những cái nhanh hơn nhanh hơn 3 lần so với câu trả lời được chấp nhận và nhanh hơn 5 lần so với câu trả lời chậm nhất ở đây.3X faster than accepted answer and 5X faster than the slowest answer here.
Để công bằng, tất cả các phương pháp cần thiết để thực hiện thay thế mảng được gửi đến hàm.
Vui lòng xem mã thời gian bên dưới:
def f1[arr, find, replace]:
# fast and readable
base=0
for cnt in range[arr.count[find]]:
offset=arr.index[find, base]
arr[offset]=replace
base=offset+1
def f2[arr,find,replace]:
# accepted answer
for i,e in enumerate[arr]:
if e==find:
arr[i]=replace
def f3[arr,find,replace]:
# in place list comprehension
arr[:]=[replace if e==find else e for e in arr]
def f4[arr,find,replace]:
# in place map and lambda -- SLOW
arr[:]=list[map[lambda x: x if x != find else replace, arr]]
def f5[arr,find,replace]:
# find index with comprehension
for i in [i for i, e in enumerate[arr] if e==find]:
arr[i]=replace
def f6[arr,find,replace]:
# FASTEST but a little les clear
try:
while True:
arr[arr.index[find]]=replace
except ValueError:
pass
def f7[lst, old, new]:
"""replace list elements [inplace]"""
i = -1
try:
while 1:
i = lst.index[old, i + 1]
lst[i] = new
except ValueError:
pass
import time
def cmpthese[funcs, args=[], cnt=1000, rate=True, micro=True]:
"""Generate a Perl style function benchmark"""
def pprint_table[table]:
"""Perl style table output"""
def format_field[field, fmt='{:,.0f}']:
if type[field] is str: return field
if type[field] is tuple: return field[1].format[field[0]]
return fmt.format[field]
def get_max_col_w[table, index]:
return max[[len[format_field[row[index]]] for row in table]]
col_paddings=[get_max_col_w[table, i] for i in range[len[table[0]]]]
for i,row in enumerate[table]:
# left col
row_tab=[row[0].ljust[col_paddings[0]]]
# rest of the cols
row_tab+=[format_field[row[j]].rjust[col_paddings[j]] for j in range[1,len[row]]]
print[' '.join[row_tab]]
results={}
for i in range[cnt]:
for f in funcs:
start=time.perf_counter_ns[]
f[*args]
stop=time.perf_counter_ns[]
results.setdefault[f.__name__, []].append[stop-start]
results={k:float[sum[v]]/len[v] for k,v in results.items[]}
fastest=sorted[results,key=results.get, reverse=True]
table=[['']]
if rate: table[0].append['rate/sec']
if micro: table[0].append['\u03bcsec/pass']
table[0].extend[fastest]
for e in fastest:
tmp=[e]
if rate:
tmp.append['{:,}'.format[int[round[float[cnt]*1000000.0/results[e]]]]]
if micro:
tmp.append['{:,.1f}'.format[results[e]/float[cnt]]]
for x in fastest:
if x==e: tmp.append['--']
else: tmp.append['{:.1%}'.format[[results[x]-results[e]]/results[e]]]
table.append[tmp]
pprint_table[table]
if __name__=='__main__':
import sys
import time
print[sys.version]
cases=[
['small, found', 9, 100],
['small, not found', 99, 100],
['large, found', 9, 1000],
['large, not found', 99, 1000]
]
for txt, tgt, mul in cases:
print[f'\n{txt}:']
arr=[1,2,3,4,5,6,7,8,9,0]*mul
args=[arr,tgt,'X']
cmpthese[[f1,f2,f3, f4, f5, f6, f7],args]
Và kết quả:
3.9.1 [default, Feb 3 2021, 07:38:02]
[Clang 12.0.0 [clang-1200.0.32.29]]
small, found:
rate/sec μsec/pass f4 f3 f5 f2 f6 f7 f1
f4 133,982 7.5 -- -38.8% -49.0% -52.5% -78.5% -78.6% -82.9%
f3 219,090 4.6 63.5% -- -16.6% -22.4% -64.8% -65.0% -72.0%
f5 262,801 3.8 96.1% 20.0% -- -6.9% -57.8% -58.0% -66.4%
f2 282,259 3.5 110.7% 28.8% 7.4% -- -54.6% -54.9% -63.9%
f6 622,122 1.6 364.3% 184.0% 136.7% 120.4% -- -0.7% -20.5%
f7 626,367 1.6 367.5% 185.9% 138.3% 121.9% 0.7% -- -19.9%
f1 782,307 1.3 483.9% 257.1% 197.7% 177.2% 25.7% 24.9% --
small, not found:
rate/sec μsec/pass f4 f5 f2 f3 f6 f7 f1
f4 13,846 72.2 -- -40.3% -41.4% -47.8% -85.2% -85.4% -86.2%
f5 23,186 43.1 67.5% -- -1.9% -12.5% -75.2% -75.5% -76.9%
f2 23,646 42.3 70.8% 2.0% -- -10.8% -74.8% -75.0% -76.4%
f3 26,512 37.7 91.5% 14.3% 12.1% -- -71.7% -72.0% -73.5%
f6 93,656 10.7 576.4% 303.9% 296.1% 253.3% -- -1.0% -6.5%
f7 94,594 10.6 583.2% 308.0% 300.0% 256.8% 1.0% -- -5.6%
f1 100,206 10.0 623.7% 332.2% 323.8% 278.0% 7.0% 5.9% --
large, found:
rate/sec μsec/pass f4 f2 f5 f3 f6 f7 f1
f4 145 6,889.4 -- -33.3% -34.8% -48.6% -85.3% -85.4% -85.8%
f2 218 4,593.5 50.0% -- -2.2% -22.8% -78.0% -78.1% -78.6%
f5 223 4,492.4 53.4% 2.3% -- -21.1% -77.5% -77.6% -78.2%
f3 282 3,544.0 94.4% 29.6% 26.8% -- -71.5% -71.6% -72.3%
f6 991 1,009.5 582.4% 355.0% 345.0% 251.1% -- -0.4% -2.8%
f7 995 1,005.4 585.2% 356.9% 346.8% 252.5% 0.4% -- -2.4%
f1 1,019 981.3 602.1% 368.1% 357.8% 261.2% 2.9% 2.5% --
large, not found:
rate/sec μsec/pass f4 f5 f2 f3 f6 f7 f1
f4 147 6,812.0 -- -35.0% -36.4% -48.9% -85.7% -85.8% -86.1%
f5 226 4,424.8 54.0% -- -2.0% -21.3% -78.0% -78.1% -78.6%
f2 231 4,334.9 57.1% 2.1% -- -19.6% -77.6% -77.7% -78.2%
f3 287 3,484.0 95.5% 27.0% 24.4% -- -72.1% -72.2% -72.8%
f6 1,028 972.3 600.6% 355.1% 345.8% 258.3% -- -0.4% -2.7%
f7 1,033 968.2 603.6% 357.0% 347.7% 259.8% 0.4% -- -2.3%
f1 1,057 946.2 619.9% 367.6% 358.1% 268.2% 2.8% 2.3% --
Làm thế nào để bạn thay thế một số bằng một số khác trong Python?
Thay thế [] tham số Phương thức thay thế [] có thể mất tối đa 3 tham số: Cựu Ước - Subring cũ bạn muốn thay thế. Mới - Chất nền mới sẽ thay thế cho chuỗi con cũ. Đếm [Tùy chọn] - Số lần bạn muốn thay thế bộ con cũ bằng bộ nền mới. Parameters
The replace[] method can take maximum of 3 parameters: old - old substring you want to replace. new - new substring which will replace the old substring. count [optional] - the number of times you want to replace the old substring with the new substring.
Làm thế nào để bạn thay thế các giá trị trong một danh sách bằng các giá trị trong một danh sách khác Python?
Cách dễ nhất để thay thế một mục trong danh sách là sử dụng cú pháp lập chỉ mục Python. Lập chỉ mục cho phép bạn chọn một phần tử hoặc phạm vi của các phần tử trong danh sách. Với toán tử gán, bạn có thể thay đổi giá trị tại một vị trí nhất định trong danh sách.use the Python indexing syntax. Indexing allows you to choose an element or range of elements in a list. With the assignment operator, you can change a value at a given position in a list.
Làm thế nào để bạn thay đổi một giá trị trong một danh sách trong Python?
Liệt kê trong Python là các loại có thể thay đổi, có nghĩa là nó có thể được thay đổi sau khi gán một số giá trị.Danh sách tương tự như các mảng trong các ngôn ngữ lập trình khác ...
Thay đổi phần tử đầu tiên mylist [0] = value ..
Thay đổi phần tử thứ ba mylist [2] = value ..
Thay đổi phần tử thứ tư mylist [3] = value ..
Làm thế nào để bạn sử dụng thay thế trong một danh sách?
Thay thế một chuỗi cụ thể trong một danh sách.Nếu bạn muốn thay thế chuỗi các phần tử của danh sách, hãy sử dụng phương thức chuỗi thay thế [] cho mỗi phần tử bằng cách hiểu danh sách.Nếu không có chuỗi được thay thế, áp dụng thay thế [] sẽ không thay đổi nó, vì vậy bạn không cần chọn một phần tử có điều kiện nếu điều kiện.use the string method replace[] for each element with the list comprehension. If there is no string to be replaced, applying replace[] will not change it, so you don't need to select an element with if condition .