【发布时间】:2021-02-19 14:24:18
【问题描述】:
假设:我有两组元组,而且任何一组都可能不包含相同数量的元组。 有什么方法可以在不迭代两组并将一组中的每个条目与另一组的每个条目进行比较的情况下使其工作?
例如,我想知道一个元组的三个条目是否在另一组的任何元组中,这是我尝试过的(示例代码):
s1 = set()
s2 = set()
s1.add(tuple(["a", "b", "c", "e"]))
s1.add(tuple(["d", "e", "f", "h"]))
s2.add(tuple(["a", "b", "c", "d"]))
s2.add(tuple(["d", "e", "f", "g"]))
s2.add(tuple(["m", "n", "o", "p"]))
for x in s1:
if x[0:3] in s2:
print(x)
这行不通。
我之所以问,是因为这些集合有数千个条目,并且对两者都进行了迭代 花费的时间太长了,我似乎想不出一个聪明的方法来做到这一点。
编辑澄清: 每个元组总是有相同数量的条目,在我的例子中是 4。 就我而言,我想知道如何检查任意组合 [0:2]、[1:3]、[0:x]。例如,我需要确认一个元组中的 [0:3] 与另一个元组中的 [0:3] 相同。
【问题讨论】:
-
您的问题需要更清楚。为什么只有 x[0:3]?根据您的示例,您还应该检查 x[1:4] 。如果您不知道元组的长度,则应检查元组中的每 3 个项目子集。您是想检查 set2 中是否存在特定元组,还是只想确认 s2 中存在一个元组,其中包含来自 s1 的 3 个元素的切片?
-
注意
tuple(["a", "b", "c", "e"])可以写成("a", "b", "c", "e")。不需要使用列表作为初始化器。 -
“我之所以问,是因为这些集合有数千个条目,并且迭代这两个条目需要的时间太长,而且我似乎无法找到一个聪明的方法来做到这一点。” – 可能需要一个专门的数据结构,例如suffix tree。如果字母表很小(4 个条目和较低的部分看起来不像常规单词),则可能只创建一个索引。但是,如果不知道您到底想要实现什么,就很难说清楚。
-
@MisterMiyagi 我有两组元组,每组有任意数量的元组,每个元组不管哪个组总是由 4 个字符串组成。
-
@JayRage 每个元组是由四个字符还是由四个字符串组成?字母是整个 UTF-8、ASCII、字母数字、小写字母还是更少?每个集合的元组是否存在重叠?
标签: python-3.x set tuples