回答
不同如果兩個字符串存儲在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