在python中获取子字符串的更快方法?

2024-09-30 10:31:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写Skew算法来构造后缀数组,我有一个长字符串(length>;=4000)。 在倾斜算法中,我必须构造三元组数组子字符串数组。在

例如:我有一个字符串s = 'abcddd'。在

  • 三元组数组是:'abc', 'bcd', 'cdd', 'ddd'
  • 子字符串数组是:'abcddd', 'bcddd', 'cddd', 'ddd', 'dd', 'd'

这是我的解决方案:

import numpy as np

# example
string = 'abdcb.....' (length >= 4000)
temp = 'abdcb......###' (length >= 4000)

triples_arr = np.array([])
sub_strings = np.array([])

for i in range (0, len(temp) - 3):
    triples_arr = np.append(triples_arr, temp[i:i + 3])
    sub_strings = np.append(sub_strings, string[i:string_len])

对于一个长字符串(length>;=4000),需要一分钟才能完成。在

有没有什么办法可以减少这个任务的处理时间?在


Tags: 字符串gt算法stringnp数组lengthtemp
3条回答

使用理解,可以比使用for循环更快地构造这些字符串:

代码:

triples_arr = [a_string[i:i+3] for i in range(0, len(a_string)-1)]
sub_strings = [a_string[i:] for i in range(len(a_string))]

测试代码:

^{pr2}$

结果:

['abc', 'bcd', 'cde', 'def', 'efg', 'fgh', 'ghi', 'hij', 'ijk', 'jkl',
 'klm', 'lmn', 'mno', 'nop', 'opq', 'pqr', 'qrs', 'rst', 'stu', 'tuv',
 'uvw', 'vwx', 'wxy', 'xyz']
['abcdefghijklmnopqrstuvwxyz', 'bcdefghijklmnopqrstuvwxyz',
 'cdefghijklmnopqrstuvwxyz', 'defghijklmnopqrstuvwxyz',
 'efghijklmnopqrstuvwxyz', 'fghijklmnopqrstuvwxyz',
 'ghijklmnopqrstuvwxyz', 'hijklmnopqrstuvwxyz', 'ijklmnopqrstuvwxyz',
 'jklmnopqrstuvwxyz', 'klmnopqrstuvwxyz', 'lmnopqrstuvwxyz',
 'mnopqrstuvwxyz', 'nopqrstuvwxyz', 'opqrstuvwxyz', 'pqrstuvwxyz',
 'qrstuvwxyz', 'rstuvwxyz', 'stuvwxyz', 'tuvwxyz', 'uvwxyz',
 'vwxyz', 'wxyz', 'xyz', 'yz', 'z']

这可能对您有效,也可能不起作用,但是如果您对bytesmemoryview对象进行操作而不是对字符串对象进行操作,那么许多优化都是可用的。例如,切片内存视图非常便宜。在

没有任何外部库和任何循环怎么办?在

Triples_Array=[]
Sub_strings=[]

def hello(data):
    if not data:
        return 0
    triple=data[:3]
    Sub_strings.append(data)
    if len(triple)==3:
        Triples_Array.append(triple)



    return hello(data[1:])
print(hello('abcddd'))

print(Sub_strings)
print(Triples_Array)

输出:

^{pr2}$

相关问题 更多 >

    热门问题