Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中检查两个字符串是否相交?_Python - Fatal编程技术网

如何在python中检查两个字符串是否相交?

如何在python中检查两个字符串是否相交?,python,Python,例如,a=“abcdefg”,b=“krtol”,它们没有交叉点,c=“hflsfjg”,那么a和c之间有交互作用。 最简单的检查方法是什么?只需要一个正确或错误的结果您可以使用内置的集合类: a = set("abcdefg") b = set("krtol") c = set("hflsfjg") if a.intersection(b): # or simply a & b pass 因此,a和b有一个交叉点。是“f”。也许你应该定义“交叉点”的含义。@Constant

例如,a=“abcdefg”,b=“krtol”,它们没有交叉点,c=“hflsfjg”,那么a和c之间有交互作用。

最简单的检查方法是什么?只需要一个正确或错误的结果

您可以使用内置的
集合
类:

a = set("abcdefg")
b = set("krtol")
c = set("hflsfjg")

if a.intersection(b): # or simply a & b
    pass

因此,
a
b
有一个交叉点。是“f”。也许你应该定义“交叉点”的含义。@Constantinius对不起,我的错误。.你想让小写字母和大写字母相交还是不相交?实际上,你不需要对交叉点集调用len()。空的集合(或列表)将导致false,并使语句更具可读性。实际上,此解决方案可能具有较差的性能,因为您告诉Python创建交集只是为了检查它是否为空。如果这两组都有100万条记录并且相交90%呢?您将生成大量的对象,并立即再次丢弃这些对象。告诉Python您的意图基本上是更好的,因为它知道它不需要结果集,这给了它优化的机会。使用isdisjoint是一种更好的方法。@Haes:对
len()
的调用不仅是多余的,而且还违反了Python的风格指南PEP 8,该指南明确禁止使用
if len(…):
@SvenMarnach:我没有阅读
PEP 8
,谢谢你的提示。更新了我的答案。性能可能与OP的用例无关。既然您在对康斯坦丁尼乌斯的回答的评论中开始讨论性能,我也要请您谈谈我的性能问题:为什么要费心将
b
转换为
<代码>集合(a)。isdisjoint(b)会更快。@sven我认为你的评论是到目前为止最好的答案+1@sven:当然你是对的,我的错。我只是想指出,计算一个完整的交点只是为了确定它们是否相交是个坏主意。当然是有效点。但是,如果没有必要,迭代整个
b
也是一个坏主意。想象一下
a
“a”
b
是以
“a”
开头的一百万字符串。您的代码需要迭代所有
b
,而我提出的变体可以在
b
的第一个字符处退出(而
set.isdisjoint()的实现实际上是这样的)。更好的优化方法是将较短的字符串转换为一个集合,并使用较长的字符串作为
isdisjoint()
的参数。你可能不会相信,但我下班开车回家时也想到了类似的事情,但是答案就不再是一行了^^^我想底线是:对于小字符串来说,这可能无关紧要,对于大字符串来说,有很大的优化空间!
def hasIntersection(a, b):
        return not set(a).isdisjoint(b)