找到两个字符串之间的差异位置

Lin*_*son 14 python

我有两个长度相等的字符串,如何找到字符串不同的所有位置?

例如,"HELPMEPLZ"和"HELPNEPLX"在位置4和8处是不同的.

Ósc*_*pez 24

试试这个:

s1 = 'HELPMEPLZ'
s2 = 'HELPNEPLX'
[i for i in xrange(len(s1)) if s1[i] != s2[i]]
Run Code Online (Sandbox Code Playgroud)

它将返回:

> [4, 8]
Run Code Online (Sandbox Code Playgroud)

上面的解决方案将返回一个列表,其中索引按排序顺序,不会创建任何不必要的中间数据结构,它将适用于Python 2.3 - 2.7.对于Python 3.X取代xrangerange.

  • py3 中不存在“xrange”;它被重命名为“范围”。 (2认同)

Fre*_*ihl 14

Python真的附带电池.看看difflib

>>> import difflib
>>> a='HELPMEPLZ'
>>> b='HELPNEPLX'
>>> s = difflib.SequenceMatcher(None, a, b)
>>> for block in s.get_matching_blocks():
...     print block
Match(a=0, b=0, size=4)
Match(a=5, b=5, size=3)
Match(a=9, b=9, size=0)
Run Code Online (Sandbox Code Playgroud)

difflib 是非常强大的,真的建议对文档进行一些研究.


ovg*_*vin 6

>>> from itertools import izip
>>> s1 = 'HELPMEPLZ'
>>> s2 = 'HELPNEPLX'
>>> [i for i,(a1,a2)  in enumerate(izip(s1,s2)) if a1!=a2]
[4, 8]
Run Code Online (Sandbox Code Playgroud)


Bri*_*and 2

如果将两个字符串存储在a和中b,则可以循环遍历所有项目并检查是否不相等。

python交互式解释器:

>>> for i in range(len(a)):
...   if a[i] != b[i]: print i, a[i], b[i]
... 
4 M N
8 Z X
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用列表推导式。全部都在一行中,输出是一个列表。

>>> [i for i in range(len(a)) if a[i] != b[i]]
[4, 8]
Run Code Online (Sandbox Code Playgroud)

这使得包装到函数中变得非常容易,这使得在各种输入上调用它变得容易。

>>> def dif(a, b):
...     return [i for i in range(len(a)) if a[i] != b[i]]
...
>>> dif('HELPMEPLZ', 'HELPNEPLX')
[4, 8]
>>> dif('stackoverflow', 'stacklavaflow')
[5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

  • Lambda 适用于“匿名”函数,并且非常适合创建一个衬垫。在这里,您为 lambda 指定了一个名称,这表明它作为常规函数会更好。此外,当您遇到错误时,lambda 会掩盖您的回溯。 (3认同)