簡體   English   中英

Python-將相同功能應用於列表元素的最快方法是什么

[英]Python - What is the fastest way to apply the same function to elements of a list

我有這個清單

l = ['2017-05-13 00:00:00', '2017-05-12 00:00:00', '2017-05-11 00:00:00']

我想為每個元素刪除00:00:00部分。 elm = elm.split(" ")[0]

有沒有比這更快的方法

for elm in l:
    elm = elm.split(" ")[0]

您應該有一個空列表,以便將拆分后的部分添加到該列表中,但是可能您省略了添加部分。

new = []
for elm in l:
    elm = elm.split(" ")[0]
    new.append(elm)

但是,更優化的方法是使用列表理解:

In [16]: [i.split()[0] for i in l]
Out[16]: ['2017-05-13', '2017-05-12', '2017-05-11']

最快的方法是使用list comprehension ,以下是一些情況:

情況0:

l = ['2017-05-13 00:00:00', '2017-05-12 00:00:00', '2017-05-11 00:00:00']
start0 = time.time()
output = []
for data in l:
    data = data.split(" ")[0]
    output.append(data)
print(output)
print(time.time()-start0)
['2017-05-13', '2017-05-12', '2017-05-11']
5.602836608886719e-05

情況1:使用lambdamap()

l = ['2017-05-13 00:00:00', '2017-05-12 00:00:00', '2017-05-11 00:00:00']
start1 = time.time()
print(list(map(lambda x:x.split(" ")[0],l)))
print(time.time()-start1)
['2017-05-13', '2017-05-12', '2017-05-11']
3.504753112792969e-05

情況2: list comprehension

l = ['2017-05-13 00:00:00', '2017-05-12 00:00:00', '2017-05-11 00:00:00']
start2 = time.time()
print([i.split()[0] for i in l])
print(time.time()-start2)
['2017-05-13', '2017-05-12', '2017-05-11']
0.00010156631469726562

當您的數據時間字符串具有固定大小時,您可以直接對字符串進行切片:

>>> l = ['2017-05-13 00:00:00', '2017-05-12 00:00:00', '2017-05-11 00:00:00']
>>> [i[:10] for i in l]
['2017-05-13', '2017-05-12', '2017-05-11']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM