首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中检查列表中的字符串时减少for循环的使用

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

Stack Overflow用户
提问于 2018-10-12 05:20:16
回答 2查看 50关注 0票数 1

我希望找到一种方法或方法来减少for循环的使用。我试着检查迭代工具文档,但是找不到相关的文档。目前,我至少使用了4-5次循环,这将使它循环到,当有大数据集时太费时了。

还有减少for循环的使用吗?我的主要目标是学习如何减少for循环的使用,而不是关于输出。

这是我的代码:

代码语言:javascript
运行
复制
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次.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-12 05:43:19

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

代码语言:javascript
运行
复制
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])
票数 1
EN

Stack Overflow用户

发布于 2018-10-12 05:33:21

您可以检查opt in iix是否稍微干净一些,而不是最内部的循环。

您还可以在列表理解中完成整个过程,这更快:

aa = [[[opt for opt in diction if opt in iix] for iix in ix] for ix in a]

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52772748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档