string - python: 從一組( 相似) 字元串中確定前綴

  显示原文与译文双语对照的内容
100 3

我有一組弦,e.g.

my_prefix_what_ever
my_prefix_what_so_ever
my_prefix_doesnt_matter

我只想找到這些字元串的最長的公共部分,這裡有前綴。在上面的結果中應該是

my_prefix_

字元串

my_prefix_what_ever
my_prefix_what_so_ever
my_doesnt_matter

應導致前綴

my_

在 python 中是否有一種相對無痛的方法來確定前綴( 無需手動迭代每個字元)?

PS: 我正在使用 python 2.6.3 。

时间:原作者:0个回答

62 1

永遠不要重寫提供給你的內容:os.path.commonprefix 執行以下操作:

返回最長路徑前綴( 接受 character-by-character ),它是列表中所有路徑的前綴。如果列表為空,則返回空字元串( '' ) 。注意,這可能會返回無效路徑,因為它在某個時間起作用。

要與其他答案進行比較,下面是代碼:

# Return the longest prefix of all list elements.
def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
 if not m: return ''
 s1 = min(m)
 s2 = max(m)
 for i, c in enumerate(s1):
 if c!= s2[i]:
 return s1[:i]
 return s1
原作者:
118 4

Ned Batchelder 可能是對的。不過,有趣的是,這裡有一個更有效的版本,即使用的 phimuemue 。

import itertools
strings = ['my_prefix_what_ever', 
 'my_prefix_what_so_ever', 
 'my_prefix_doesnt_matter']
def all_same(x):
 return all(x[0] == y for y in x)
char_tuples = itertools.izip(*strings)
prefix_tuples = itertools.takewhile(all_same, char_tuples)
''.join(x[0] for x in prefix_tuples)

作為對可讀性的冒犯,這裡有一個行版本:)

>>> from itertools import takewhile, izip
>>> ''.join(c[0] for c in takewhile(lambda x: all(x[0] == y for y in x), izip(*strings)))
'my_prefix_'
原作者:
...