首页 > 解决方案 > 在python中检查列表中的字符串时减少for循环的使用

问题描述

我想找到一种方法或方法来减少 for 循环的使用。我试图检查 itertools 文档,但找不到任何相关文档。我目前至少使用 4-5 次 for 循环,这将使其循环太深,并且在拥有大数据集时太耗时。

反正有没有减少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 次 for 循环减少到 1-2 次或 1-3 次。

标签: pythonfor-loop

解决方案


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

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])

推荐阅读