在python中,在列表理解中使用.join比简单的for循环快吗?

在python中,在列表理解中使用.join比简单的for循环快吗?,python,performance,list-comprehension,Python,Performance,List Comprehension,假设我有两个代码: a = [1,2,3,4,5,6,7,8,9,10] print("\n".join(x for x in a)) 哪一个更快?更重要的原因是什么?第一个将抛出一个类型错误,因为您需要使用join的字符串列表 但是,为了这个目的,我会考虑列表为字符串: e、 g a=['1','2','3','4','5','6','7','8','9','10'] 对于时间评估,我将使用“时间”,但最后我会给你一个如何使用时间的例子 因此,让我们创建两个用于评估的

假设我有两个代码:

a = [1,2,3,4,5,6,7,8,9,10]

print("\n".join(x for x in a))

哪一个更快?更重要的原因是什么?

第一个将抛出一个类型错误,因为您需要使用join的字符串列表

但是,为了这个目的,我会考虑列表为字符串:

e、 g

a=['1','2','3','4','5','6','7','8','9','10']
对于时间评估,我将使用“时间”,但最后我会给你一个如何使用时间的例子

因此,让我们创建两个用于评估的函数:

def第一种情况(a):
开始=时间。时间()
打印(“\n”.join(x代表a中的x))
打印(time.time()-start)
def第二种情况(a):
开始=时间。时间()
对于a中的x:
打印(x)
打印(time.time()-start)
>>>第一宗个案(a)
1.
2.
3.
4.
5.
6.
7.
8.
9
10
3.147125244140625e-05
>>>第二宗个案(a)
第二宗个案(a)
1.
2.
3.
4.
5.
6.
7.
8.
9
10
6.270408630371094e-05
因此,我们在循环一中需要更多的执行时间

此外,我们还可以改进第一个表达式,因为在联接操作中实际上不需要

#我们可以将表达式重写如下
>>>打印(“\n”。加入(a))
1.
2.
3.
4.
5.
6.
7.
8.
9
10
不需要,连接已经需要一个列表,因此不需要在列表上迭代

现在让我们运行第三个案例测试

def第三种情况(a):
开始=时间。时间()
打印(“\n”。加入(a))
打印(time.time()-start)
>>>第三宗个案(a)
1.
2.
3.
4.
5.
6.
7.
8.
9
10
3.0040740966796875e-05
现在我们有了最快的版本

您可以也应该再对相同的函数进行几次评估,因为我们实际上不能只运行一次真正的结果

为此,你可以使用timeit.timeit。 从:

timeit.timeit(“-”.join(str(n)表示范围(100))中的n),编号=10000)

您是否使用
timeit
查看?请注意,您的两个部分并不完全相同:第二种情况下的多个
print
调用的开销(这是您在问题标题中没有提到的)可能是主要差异。与之相比,
join
vs.
for
并不重要。第一个(a)不起作用,因为str.join要求iterables是字符串,(b)不是列表理解,而是从一个完美的列表中生成的。正如@JohnColeman所说,比较它们就像比较苹果和香蕉。
a = [1,2,3,4,5,6,7,8,9,10]
for x in a:
    print(a)