【发布时间】:2023-03-22 03:49:01
【问题描述】:
我有两个字符串列表,并希望找到它们之间所有不包含公共字符的字符串对。例如
list1 = ['abc', 'cde']
list2 = ['aij', 'xyz', 'abc']
desired output = [('abc', 'xyz'), ('cde', 'aij'), ('cde', 'xyz')]
我需要它尽可能高效,因为我正在处理包含数百万个字符串的列表。 目前,我的代码遵循以下一般模式:
output = []
for str1 in list1:
for str2 in list2:
if len(set(str1) & set(str2)) == 0:
output.append((str1, str2))
这是 O(n^2) 并且需要很多小时才能运行,有人对如何加快速度有一些建议吗?也许有一种方法可以利用每个正在排序的字符串中的字符?
非常感谢您!
【问题讨论】:
-
你需要每一对还是 99% 就足够了?
-
你能提供一些关于字符串本身的信息吗?它们都是'abc'(3个字母)格式吗?它们是否可以有类似的字母,例如“aab”,或者它们总是不同的?列表也可以有类似的字符串吗? (例如 'xyz' 2 次等)
-
您可以使用慢速解决方案通过对每个列表的 1/1000 进行采样,运行慢速算法,然后乘以 100 万来估算对数。可能有太多对了。
-
99% 确实足够了,关于字符串的更多信息,它们按字母顺序排序,1 到 26 个字母之间的任意位置,字母表中的每个字母只能出现一次。字符串在两个列表中也是唯一的。
-
伟大的建议大卫,不幸的是我怀疑我会找到任何解决方案,因此抽样方法可能会错过百万分之一的解决方案
标签: python string algorithm comparison