python - 在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 次。
解决方案
您可以使用索引字典来跟踪每个字符的两个索引,然后使用集合交集来查找匹配的字符。关键是利用字典的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])
推荐阅读
- python - 中止失败片段的作业 yt-dlp
- snowflake-cloud-data-platform - 雪花 - 检查一个表中的列是否与另一表中的列的数据类型匹配
- arrays - 当数组是C中的struct类型时,如何检查条目数组的第一个条目是否为空?
- javascript - 在 JavaScript 中的 Object 中使用短路 (||)
- mysql - 带子查询的左连接 / 4 个表
- influxdb - 如何使用 lineprotocol 和 API 在 Influx 中插入多个点
- python - 在浏览器中查看 Matplotlib funcAnimation 实时绘图
- android-studio - Android Studio 在想要打开布局时关闭
- javascript - 用文件上传数据
- snowflake-cloud-data-platform - 用于更改数据库或架构中所有表的雪花 SQL 过程