GVKun编程网logo

在python中搜索列表的最快方法(python 搜索列表)

17

在本文中,我们将为您详细介绍在python中搜索列表的最快方法的相关知识,并且为您解答关于python搜索列表的疑问,此外,我们还会提供一些关于python–从逻辑矩阵到集合列表的最快方式、Pytho

在本文中,我们将为您详细介绍在python中搜索列表的最快方法的相关知识,并且为您解答关于python 搜索列表的疑问,此外,我们还会提供一些关于python – 从逻辑矩阵到集合列表的最快方式、Python:创建n个列表的列表的最快方法、从Python中的字符串创建重叠子串列表的最快方法、在Python中,在具有特定扩展名的目录中构建文件列表的最快方法的有用信息。

本文目录一览:

在python中搜索列表的最快方法(python 搜索列表)

在python中搜索列表的最快方法(python 搜索列表)

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

答案1

小编典典

还要注意,我将拥有的值列表将没有重复的数据,而且我实际上并不在乎它的顺序。我只需要能够检查值的存在。

不要使用列表,set()而是使用列表。它完全具有您想要的属性,包括快速的in测试。

我已经看到在一组更改一组列表的地方(大多数情况下是繁重的运算),速度提高了20倍以上。

python – 从逻辑矩阵到集合列表的最快方式

python – 从逻辑矩阵到集合列表的最快方式

我需要将稀疏逻辑矩阵转换为集合列表,其中每个列表[i]包含具有列[i]的非零值的行集.以下代码有效,但我想知道是否有更快的方法来执行此操作.我使用的实际数据大约是6000×6000,比这个例子要稀疏得多.

import numpy as np

A = np.array([[1,1],[0,1,0],[1,0]])

rows,cols = A.shape

C = np.nonzero(A)
D = [set() for j in range(cols)]

for i in range(len(C[0])):
    D[C[1][i]].add(C[0][i])

print D

解决方法

如果将稀疏数组表示为 csc_matrix,则可以使用indices和indptr属性来创建集合.

例如,

In [93]: A
Out[93]: 
array([[1,0]])

In [94]: from scipy.sparse import csc_matrix

In [95]: C = csc_matrix(A)

In [96]: C.indptr
Out[96]: array([ 0,5,8,12,16,20,23],dtype=int32)

In [97]: C.indices
Out[97]: array([0,2,3,4,6,7,3],dtype=int32)

In [98]: D = [set(C.indices[C.indptr[i]:C.indptr[i+1]]) for i in range(C.shape[1])]

In [99]: D
Out[99]: 
[{0,5},{1,4},7},6},{0,3}]

对于数组而不是集合的列表,只需不要调用set():

In [100]: [C.indices[C.indptr[i]:C.indptr[i+1]] for i in range(len(C.indptr)-1)]
Out[100]: 
[array([0,5],dtype=int32),array([1,4],7],6],array([0,dtype=int32)]

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

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

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

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

由于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))

这实际上要慢一些。:(

从Python中的字符串创建重叠子串列表的最快方法

从Python中的字符串创建重叠子串列表的最快方法

我正在尝试生成给定字符串中所有重叠n长度子串的列表.

例如,对于6的n和字符串“hereismystring”,我将生成列表[“hereis”,“ereism”,“reismy”,…,“string”].我正在使用的琐碎代码现在看起来像这样:

n = 6
l = len(string)
substrings = [string[i:(i + n)] for i in xrange(l - n + 1)]

很容易.问题是,我想加快速度(我有很多非常长的字符串). Python中有更快的技术吗?考虑到Python的字符串例程无论如何都会在C中下载到Cython帮助吗?

作为参考,这种技术在我的机器上需要大约100us(一个新的Macbook Pro),对于500长度的字符串和n为30.

我在这里先向您的帮助表示感谢!

解决方法

从Python编码技术最快的问题退一步,我会以不同的方式解决问题.由于所有字符串都是相同的长度,并且都来自单个源字符串,为什么不直接使用字符范围,而不是将它们转换为正确的字符串?您可以避免大量的分配和复制,但是您必须调整代码才能知道每个“字符串”的长度为n个字符.

换句话说,当您想要使用子字符串时,只需直接从源字符串中读取范围.您将尽可能快地处理所需的字符,因为它们可以从缓存中提取.您可以将“子字符串”表示为源字符串中的偏移量.

有时,如果你想要超快的性能,你必须留下熟悉的数据结构.只是一个想法.

在Python中,在具有特定扩展名的目录中构建文件列表的最快方法

在Python中,在具有特定扩展名的目录中构建文件列表的最快方法

在GNU / Linux系统上的Python中,以递归方式扫描所有.MOV或.AVI文件的目录并将它们存储在列表中的最快方法是什么?

最佳答案
您可以使用os.walk()进行recuresive walking,使用glob.glob()或fnmatch.filter()进行文件匹配:

检查这个answer

我们今天的关于在python中搜索列表的最快方法python 搜索列表的分享就到这里,谢谢您的阅读,如果想了解更多关于python – 从逻辑矩阵到集合列表的最快方式、Python:创建n个列表的列表的最快方法、从Python中的字符串创建重叠子串列表的最快方法、在Python中,在具有特定扩展名的目录中构建文件列表的最快方法的相关信息,可以在本站进行搜索。

本文标签: