我希望找到一种方法或方法来减少for循环的使用。我试着检查迭代工具文档,但是找不到相关的文档。目前,我至少使用了4-5次循环,这将使它循环到,当有大数据集时太费时了。
还有减少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次.
发布于 2018-10-12 05:43:19
您可以使用索引dict跟踪每个字符的两个索引,然后使用set交集查找匹配的字符。关键是要利用dicts的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])
发布于 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]
。
然而,所有这些都不会最终导致问题的渐进加速;这种复杂性最终取决于您想要做的事情。如果您需要检查一组项目的每个组合,那么无论您做什么,这都需要组合时间。
编辑:如果单词包含一个给定键的多个实例,那么独占检查包容将给出一个不同的答案。
https://stackoverflow.com/questions/52772748
复制相似问题