效率有多高列表.索引(值、开始、结束)?

2024-05-14 06:06:14 发布

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

今天我意识到python的list.index也可以采用可选的start(甚至end)参数。你知道吗

我想知道这是否得到了有效的实施,这两种方法中哪一种更好:

pattern = "qwertyuytresdftyuioknn"
words_list = ['queen', 'quoin']
for word in words_list:
    i = 1
    for character in word:
        try:
            i += pattern[i:].index(character)
        except ValueError:
            break
        else:
            yield word

或者

pattern = "qwertyuytresdftyuioknn"
words_list = ['queen', 'quoin']
for word in words_list:
    i = 1
    for character in word:
        try:
            i = pattern.index(character, i)
        except ValueError:
            break
        else:
            yield word

所以基本上是i += pattern[i:].index(character)i = pattern.index(character, i)。你知道吗

generic\u search\u machine上搜索这个没有任何帮助,除了很多初学者教程试图教我什么是列表。你知道吗

背景: 此代码尝试从words_list中查找与pattern匹配的所有单词。pattern是用户通过在键盘上滑动输入的字符列表,就像在大多数现代移动设备的键盘上一样。你知道吗

在实际实现中,有一个额外的要求,即返回的单词应该长于5个字符,并且第一个和最后一个字符必须完全匹配。为了简洁起见,这里省略了这些行,因为它们的实现非常简单。你知道吗


Tags: inforindexlistwordpatternwordstry
1条回答
网友
1楼 · 发布于 2024-05-14 06:06:14

这将调用在C中实现的内置函数:

i = pattern.index(character, i)

即使不查看source code,您也可以始终假设底层实现足够聪明,可以高效地实现它,即它不查看列表中的第一个i值。你知道吗

根据经验,使用内置功能总是比你自己实现的最好的东西要快。你知道吗

试图让它变得更好:

i += pattern[i:].index(character)

这无疑更糟。它对pattern[i:]进行复制,然后在其中查找character。你知道吗

所以,在最坏的情况下,如果你有一个pattern的1GB和i=1,这会在内存中复制1GB的数据,试图跳过第一个元素(无论如何都会被跳过)。你知道吗

相关问题 更多 >