在python中检查列表中的字符串时减少for循环的使用

2024-09-30 06:21:54 发布

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

我想找到一种方法来减少for循环的使用。我试图查看itertools文档,但找不到任何相关的文档。我目前使用至少4-5次for循环,这将使它循环到oooooodeeep和太耗时时,有大的数据集。你知道吗

有没有办法减少for循环的使用?我的主要目标是学习如何减少for循环的使用,而不是输出。你知道吗

这是我的密码:

aa = [[[] for i in range(10)] for i in range(10)]


diction = {"m":"something", "k":"something", "a":"something"}
a = [["m", "baba", "black", "no", "sheep"], ["k", "kong", "came", "out"]]

for opt in diction.keys():
    for i, ix in enumerate(a):
        for ii, iix in enumerate(ix):
            for iixx in iix:
                print(iixx)
                if opt == iixx:
                    aa[i][ii].append(
                            [iixx])

提问目的:

如果可能的话,从循环的4-5倍减少到1-2倍或1-3倍。你知道吗


Tags: 方法in文档forrangesomethingiiaa
2条回答

代替最里面的循环,您可以检查opt in iix,这稍微干净一些。你知道吗

你也可以在列表理解中完成整个过程,这会更快:

aa = [[[opt for opt in diction if opt in iix] for iix in ix] for ix in a]。你知道吗

然而,这些都不会最终导致问题的渐进加速;这种复杂性最终取决于您要做的事情。如果您需要检查一组项目的每个组合,那么无论您做什么,这都需要组合时间。你知道吗

编辑:如果单词包含给定键的多个实例,则独占检查包含将给出不同的答案

您可以使用索引dict来跟踪每个字符的两个索引,然后使用set intersection来查找匹配的字符。关键是利用dict的O(1)平均查找时间和set交集的线性平均查找时间:

aa = [[[] for i in range(10)] for i in range(10)]
index = {}
for i, l in enumerate(a):
    for j, s in enumerate(l):
        for c in s:
            index.setdefault(c, []).append((i, j))
for c in diction.keys() & index.keys():
    for i, j in index[c]:
        aa[i][j].append([c])

相关问题 更多 >

    热门问题