python-3.x - python按字元和默認值進行分割

92 1

collections引用的python庫函數namedtuple https://github.com/python/cpython/blob/master/Lib/collections/init.py


def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None):



 # Validate the field names. At the user's option, either generate an error


 # message or automatically replace the field name with a valid name.


 if isinstance(field_names, str):


 field_names = field_names.replace(',', ' ').split()



上面的代碼行有replace(',','').split(),

這是測試時間成本的測試代碼:


from random import randrange



def create_str(n):


 a = []


 for _i in range(n):


 a.append(str(randrange(101)))



 return ','.join(a)



s = create_str(1000)



# print(s)



def test_a():


 s.split(',')



def test_b():


 s.replace(',', ' ').split()



if __name__ == '__main__':


 import timeit


 print(['test_a: ', timeit.timeit("test_a()", setup="from __main__ import test_a")])


 print(['test_b: ', timeit.timeit("test_b()", setup="from __main__ import test_b")])



輸出:


['test_a: ', 59.938546671997756]


['test_b: ', 68.51630863297032]



s =create_str(10)獲得以下信息:


['test_a: ', 0.9246872899821028]


['test_b: ', 1.2178910280345008]



s =create_str(100)獲得以下信息:


['test_a: ', 6.570624853018671]


['test_b: ', 7.8685859580291435]



test_b更快。

https://docs.python.org/3/library/collections.html#collections.namedtuple提到了以下內容:

field_names是一個字元串序列,例如,['x','y'],另外,field_names可以是單個字元串,每個欄位名用空格和或逗號分隔,例如,'xy'或'x,y'。

时间: 原作者:

133 3

考慮一個字元串'a, b, c',使用 replace split,它會分割成['a','b','c'],而使用','分割, 結果將是['a', ' b', ' c']

因此,除非在運行時使用動態生成的字元串(非列表)欄位名稱在運行時生成新的namedtuple類型,否則時間差異很小。

原作者:
...