回答
不同如果两个字符串存储在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
另一种方式做,这是与列表内涵。这一切都在一行,输出是一个列表。
>>> [i for i in range(len(a)) if a[i] != b[i]]
[4, 8]
这使得它很容易包装成一个函数,这使得在各种输入上调用它很容易。
>>> 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]
当你不必使用lambda时:'def dif(a,b):return [i为范围内的我(len(a))如果a [i]!= b [i]]' – 2011-12-17 15:30:45
@StevenRumbalski,为什么不呢?就我所知,它完全一样。它是不是Pythonic?或更慢? – FakeRainBrigand 2011-12-17 15:41:50
Lambdas用于*匿名*功能,非常适合创建一个衬垫。在这里,你给lambda指定了一个名字,这表明它会比常规函数更好。此外,当你有一个bug时,lambda会隐藏你的追踪。 – 2011-12-17 17:08:20
最简单方法是通过比较所述字母当两个字符不等于彼此分割数据为两个字符数组,然后循环并返回的索引。
只要两个字符串的长度相等,此方法就可以正常工作。
将字符串逐个字符地配对,并将其与计数索引一起迭代到该集合上。测试每对中的字符是否不同;如果他们这样做,输出where的索引。
使用Python内建函数可以在一行整齐地做到这一点:
>>> x = 'HELPMEPLZ'
>>> y = 'HELPNEPLX'
>>> {i for i, (left, right) in enumerate(zip(x,y)) if left != right}
{8, 4}
虽然OP没有这么说,但我愿意打赌,一个解决方案以升序的方式产生错误的索引将是更可取的。 – 2011-12-17 20:55:20
@Linus:如果你想要这个,把括号改为'[]'。这会给你一个列表理解而不是一个集合理解,所以保留了顺序。 – katrielalex 2011-12-17 21:16:17
>>> from itertools import izip
>>> s1 = 'HELPMEPLZ'
>>> s2 = 'HELPNEPLX'
>>> [i for i,(a1,a2) in enumerate(izip(s1,s2)) if a1!=a2]
[4, 8]
试试这个:
s1 = 'HELPMEPLZ'
s2 = 'HELPNEPLX'
[i for i in xrange(len(s1)) if s1[i] != s2[i]]
它将返回:
> [4, 8]
以上解决方案将返回一个列表w如果索引按排序顺序排列,将不会创建任何不必要的中间数据结构,并且它将在Python 2.3 - 2.7上运行。对于Python 3.x替换xrange
为range
。
'zip'是Python 3中的一个迭代器。不确定Python 2.3是什么意思。 – katrielalex 2011-12-17 15:08:20
这意味着它不使用Python 3特有的功能 - 比如假设zip是一个迭代器,或者集合解析是可用的。只要列表解析可用,我的解决方案即使在较老的Python版本中也能有效工作 – 2011-12-17 15:22:12
集合解析在Python 2.7中。 – katrielalex 2011-12-17 16:28:55
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)
difflib
是非常强大的,真的是推荐的文档的一些研究。
- 1. 查找字符串之间的差异
- 2. Swift - 在字符串中的两个位置之间查找子字符串
- 3. 使用zip查找Scala中两个字符串之间的差异
- 4. JavaScript - 两个时间字符串之间的差异
- 5. SQL查找两行之间的差异
- 6. vb.net查找两个字符串之间的字符串
- 7. 查找两个字符串之间的所有子字符串
- 8. 使用for循环找到两个时间字符串之间的差异(hh:mm:ss)
- 9. 使用php的两个xml字符串之间的差异
- 10. 计算两个字符串之间的差异
- 11. 使用Javascript检测两个字符串之间的差异
- 12. 如何计算两个字符串之间的差异?
- 13. 获取两个字符串之间的差异
- 14. 获取两个html字符串之间的差异
- 15. 如何计算Javascript中两个字符串之间的差异?
- 16. 找到两个值之间的差异?
- 17. 找到两个字符串之间不同的第一个字符位置
- 18. 如何找到字符串中两个时间值的差异?
- 19. 查找两个字符串之间的额外字符
- 20. 查找两个已知字符之间的未知字符串
- 21. 查找两个字符之间的子字符串
- 22. 等字符串之间的差异
- 23. SQL - 两个查询之间的差异
- 24. 查询找到两个时间数据之间的差异
- 25. 查找两个时间戳之间的差异
- 26. 替换位于两个位置之间的子字符串
- 27. 找到两个字符串之间的字符串的文件
- 28. 查找两个字符串之间不匹配的字母
- 29. 找到同一个表中两个字段之间的差异
- 30. 如何查找两个字符串之间的第二个字符串
看起来对我来说是功课。显示你的尝试和你遇到的问题,然后尝试提出具体的问题 – tback 2011-12-17 14:50:41
这不是作业,我需要它来做一个更大的功能复合体。因此,在这里写下所有内容有点困难.. – 2011-12-17 14:53:13
但是函数分割字符串: ('HEL','PME','PLZ')和('HEL','PNE','PLX') – 2011-12-17 14:55:48