当前位置: 首页 > 面试题库 >

Python:创建n个列表的列表的最快方法

蒙麒
2023-03-14
问题内容

所以我想知道如何最好地创建一个空白列表的列表:

[[],[],[]...]

由于Python如何处理内存中的列表,因此不起作用:

[[]]*n

这确实会创建,[[],[],...]但是每个元素都是相同的列表:

d = [[]]*n
d[0].append(1)
#[[1],[1],...]

类似于列表理解的作品:

d = [[] for x in xrange(0,n)]

但这使用Python VM进行循环。有什么方法可以使用隐式循环(利用C语言编写的代码)吗?

d = []
map(lambda n: d.append([]),xrange(0,10))

这实际上要慢一些。:(


问题答案:

可能唯一的方法是比

d = [[] for x in xrange(n)]

from itertools import repeat
d = [[] for i in repeat(None, n)]

它不必int每次迭代都创建一个新对象,并且在我的计算机上快15%。

编辑 :使用NumPy,可以避免使用Python循环

d = numpy.empty((n, 0)).tolist()

但这实际上比列表理解要慢2.5倍。



 类似资料:
  • 问题内容: 据我所知,在python中,至少有3到4种方法可以创建和初始化给定大小的列表: 简单循环: 简单循环: 清单理解: 列表和整数乘法: 在这些示例中,考虑到列表仅包含50个元素,我认为不会有任何性能差异,但是如果我需要一百万个元素的列表怎么办?使用make会有所改善吗?在python中创建和初始化列表的首选/最快方法是哪种? 问题答案: 让我们使用进行一些时间测试* : 从上面可以看到,

  • 问题内容: 我想创建一系列长度不一的列表。每个列表将包含相同的元素e,重复n次数(其中列表的长度)。 如何创建列表,而不对每个列表使用列表理解? 问题答案: 你还可以编写: 你应该注意,例如,如果e是一个空列表,你将得到一个具有n个指向同一列表的引用的列表,而不是个独立的空列表。 性能测试 乍看之下,似乎是重复是创建一个具有个相同的元素列表的最快方法: 但是等等-这不是一个公平的测试… 该函数实际

  • 问题内容: 当您执行类似列表在哪里的操作时,python会在列表上进行顺序搜索吗​​?还是创建哈希表表示来优化查找?在应用程序中,我需要这样做,因为我将在列表上进行很多查找,所以最好先执行诸如此类的操作,然后执行?还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序。我只需要能够检查值的存在。 问题答案: 还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序

  • 问题内容: 获取存储在数组中的列表的前n个元素的最快方法是什么? 考虑到这种情况: 选项1: 选项2: 选项3: 是否有更快的方法?也许使用Java8流? 问题答案: 选项1比选项2快 因为选项2创建了一个新引用,然后从中创建了一个元素数组(选项1完美调整了输出数组的大小)。但是,首先您需要通过一个错误来解决此问题。使用(不是)。喜欢,

  • 问题内容: 我有一个数据框,其中某些单元格包含多个值的列表。我不想扩展一个单元格中的多个值,而是想扩展数据框,以便列表中的每个项目都有自己的行(所有其他列中的值都相同)。所以,如果我有: 如何转换为长格式,例如: 索引并不重要,可以将现有的列设置为索引也可以,最后的顺序也不重要。 问题答案: 结果: PS 在这里你可能会发现一些通用的解决方案 更新:一些解释:IMO了解此代码的最简单方法是尝试逐步

  • 问题内容: 这个问题已经在这里有了答案 : 9年前关闭。 我有两个清单: 我需要从这些列表中创建一个元组列表,如下所示: 我尝试这样做: 但导致: 即x中每个元素与y中每个元素的元组列表…什么是我想做的正确方法?谢谢… 编辑: 在编辑之前提到的其他两个重复是我的错,我将其缩进另一个for循环中是错误的… 问题答案: 使用内置函数: 在Python 3中: 在Python 2中: