I added additional tests to Roee Gavirel's code 2 that convincingly show that combining lists into strings is no faster than s + = "something".
Results:
Python 2.7.15rc1 Iterations: 100000 format done in 0.317540168762s %s done in 0.151262044907s list+join done in 0.0055148601532s str cat done in 0.00391721725464s Python 3.6.7 Iterations: 100000 format done in 0.35594654083251953s %s done in 0.2868080139160156s list+join done in 0.005924701690673828s str cat done in 0.0054128170013427734s f str done in 0.12870001792907715s
The code:
from time import time def _with_cat(i): _st = '' for i in range(0, i): _st += "0" return _st def _with_f_str(i): _st = '' for i in range(0, i): _st = f"{_st}0" return _st def _with_format(i): _st = '' for i in range(0, i): _st = "{}{}".format(_st, "0") return _st def _with_s(i): _st = '' for i in range(0, i): _st = "%s%s" % (_st, "0") return _st def _with_list(i): l = [] for i in range(0, i): l.append("0") return "".join(l) def _count_time(name, i, func): start = time() r = func(i) total = time() - start print("%s done in %ss" % (name, total)) return r iteration_count = 100000 print('Iterations: {}'.format(iteration_count)) r1 = _count_time("format ", iteration_count, _with_format) r2 = _count_time("%s ", iteration_count, _with_s) r3 = _count_time("list+join", iteration_count, _with_list) r4 = _count_time("str cat ", iteration_count, _with_cat) r5 = _count_time("f str ", iteration_count, _with_f_str) if len(set([r1, r2, r3, r4, r5])) != 1: print("Not all results are the same!")
Martlark Apr 04 '19 at 22:31 2019-04-04 22:31
source share