列表到带有前置静态文本的字符串(性能,大多数pythonic)

时间:2015-07-29 08:30:23

标签: python performance

我有一个标签列表(['aa', 'bb', 'cc']),我想将其作为字符串(label=aa label=bb label=cc)。这是微不足道的,但我想要性能和pythonic方法来做到这一点。

我目前拥有的是这个;

In [1]: timeit ''.join([ 'label={} '.format(i) for i in ['aa', 'bb', 'cc']])
1000000 loops, best of 3: 1.36 us per loop

和这个

In [2]: timeit 'label=' + ' label='.join(['aa', 'bb', 'cc']) + ' '
1000000 loops, best of 3: 346 ns per loop

它们都产生相同的字符串,但第二个字符串,我觉得这样做是非常非pythonic的方式更快。<​​/ p>

是否有一种不会伤害我心脏的更好,更py的方式?

2 个答案:

答案 0 :(得分:1)

这是否重要?

l = ('aa', 'bb', 'cc')
('label=%s '*len(l)) % l

timeit给出

timeit ('label=%s ' * len(l)) % l
1000000 loops, best of 3: 263 ns per loop

答案 1 :(得分:0)

我非常怀疑你会找到比第二种更快的方式, 这个对你来说可能看起来更像“pythonic”,但你的第二个仍然是这个的3倍:

''.join(map(lambda z: 'label=' + z + ' ', ['aa', 'bb', 'cc']))

结果:

python -m timeit "''.join(map(lambda z: 'label=' + z + ' ', ['aa', 'bb', 'cc']))"
1000000 loops, best of 3: 1.19 usec per loop

python -m timeit "'label=' + ' label='.join(['aa', 'bb', 'cc']) + ' '"
1000000 loops, best of 3: 0.361 usec per loop