[x[:] for x in [[foo] * 10] * 10] # for immutable foo!
下面是一些python3计时,小列表和大列表
$python3 -m timeit '[x[:] for x in [[1] * 10] * 10]'
1000000 loops, best of 3: 1.55 usec per loop
$ python3 -m timeit '[[1 for i in range(10)] for j in range(10)]'
100000 loops, best of 3: 6.44 usec per loop
$ python3 -m timeit '[x[:] for x in [[1] * 1000] * 1000]'
100 loops, best of 3: 5.5 msec per loop
$ python3 -m timeit '[[1 for i in range(1000)] for j in range(1000)]'
10 loops, best of 3: 27 msec per loop
bar = []
for item in some_iterable:
bar.append(SOME EXPRESSION)
这有助于推动列表理解的引入,将该片段转换为
bar = [SOME EXPRESSION for item in some_iterable]
它更短,有时更清晰。通常你习惯于识别这些,并且经常用理解来代替循环。
您的代码遵循此模式两次
twod_list = [] \
for i in range (0, 10): \
new = [] \ can be replaced } this too
for j in range (0, 10): } with a list /
new.append(foo) / comprehension /
twod_list.append(new) /
这种方法比嵌套列表理解快
下面是一些python3计时,小列表和大列表
说明:
[[foo]*10]*10
创建重复10次的同一对象的列表。不能只使用这个,因为修改一个元素将修改每行中的同一个元素!x[:]
相当于list(X)
,但是效率更高一些,因为它避免了名称查找。不管怎样,它都会为每一行创建一个浅层副本,因此现在所有元素都是独立的。不过,所有元素都是相同的
foo
对象,因此如果foo
是可变的,则不能使用此方案,必须使用或者假设一个类(或函数)
Foo
返回foo
s您可以使用list comprehension:
Python中经常出现的一个模式是
这有助于推动列表理解的引入,将该片段转换为
它更短,有时更清晰。通常你习惯于识别这些,并且经常用理解来代替循环。
您的代码遵循此模式两次
相关问题 更多 >
编程相关推荐