我想在列表的每个元素中添加一个常量值作为前缀。我想做类似于 this post 的事情。但以上答案都使用for循环。我想避免程序中的循环。
我的目标是我必须创建一个列表,其值应为"unknown contact number 0", "unknown contact number 1","unknown contact number 2"..."unknown contact number n".
,此处unknown contact number
是我的前缀。我想将此元素添加到列表中。
到目前为止,我已经尝试过了
x=pd.DataFrame(index=range(val))
print ('unknown contact number '+x.index.astype(str)).values.tolist()
我的问题是我是否要在代码中添加更复杂的代码以避免for循环? 或任何其他更好的方法来解决此问题?
谢谢。
答案 0 :(得分:5)
如果性能很重要,可以使用f-string
,因为熊猫的文本功能很慢:
a = [f'unknown contact number {i}' for i in range(N)]
时间:
N = 10000
In [31]: %timeit ('unknown contact number ' + pd.Series(np.arange(N)).astype(str)).tolist()
6.63 ms ± 708 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [32]: %timeit [f'unknown contact number {i}' for i in range(N)]
317 µs ± 3.61 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
答案 1 :(得分:0)
如果您想不惜一切代价避免for循环,可以尝试使用带有lambda函数的map。
list_ = map(lambda x : 'unknown contact number' + x, df.index.astype(str).values.tolist())
如果您使用的是python 3,则map具有懒惰的优势。尽管将具有lambda函数的map与列表理解相比要慢一些,但是如果您具有自定义函数,则始终可以将其与map一起使用。