2015-04-30 40 views
-2

我如何比較列表中例如,所有的字符串:比較在Python列表中的字符串和輸出字符,直到它們是相同的

"A-B-C-D-E-F-H-A", 
"A-B-C-F-G-H-M-P", 

和輸出,直至其性格它們是相同的:

在這個例子中以上它將是:

Character 6 

並輸出最相似的字符串。

我試着用collections.Counter,但沒有奏效。

+0

這些都是字符串,而不是名單。我可以用下面的詞/字符串「carpark」和「carparkstreet」來做同樣的事情,我會得到7的值。前7個字母是相同的。 – digit

+0

@Kasra:每個頭六個字符都是'A','','B','','C','-'。第七個是不同的,'D'對'F'。所以,6是​​有道理的。 – abarnert

+0

@Kasra爲了您的問題秒鐘,問自己什麼是每個_string _...的6個字符;) – Spirine

回答

3

你試圖通過字符步調一致兩個字符串去的性格。這是zip工作:

A = "A-B-C-D-E-F-H-A" 
B = "A-B-C-F-G-H-M-P" 

count = 0 
for a, b in zip(A, B): 
    if a == b: 
     count += 1 
    else: 
     break 

或者,如果你喜歡「......只要他們是......」爲takewhile工作:

from itertools import takewhile 
from operator import eq 

def ilen(iterable): return sum(1 for _ in iterable) 

count = ilen(takewhile(lambda ab: eq(*ab), zip(A, B))) 

如果你有一個清單這些字符串,並希望每個字符串比較所有其它的字符串:

首先,你把上面的代碼放到一個函數。我會利用迭代版本做到這一點,但你可以與其他很容易地做到這一點:現在

def shared_prefix(A, B): 
    return ilen(takewhile(lambda ab: eq(*ab), zip(A, B))) 

,對於每一個字符串,你把它比作弦的所有的休息。這裏有一個簡單的方法與combinations做到這一點:

from itertools import combinations 

counts = [shared_prefix(pair) for pair in combinations(list_o_strings, 2)] 

但是,如果你不明白這一點,你可以把它寫成一個嵌套循環。唯一棘手的部分是「剩餘字符串」的含義。你不能遍歷所有字符串外層和內部循環,否則你會比較每對字符串的兩倍(每個訂單一次),並且每個字符串比較本身。所以它的意思是「所有的字符串在當前之後」。像這樣:

counts = [] 
for i, s1 in enumerate(list_o_strings): 
    for s2 in list_o_strings[i+1:]: 
     counts.append(prefix(s1, s2)) 
+0

如何在循環中遍歷字符串列表來使用它?謝謝。第二種方法(需要時間)我必須理解。 – digit

+0

@ user413734:我不確定你想循環什麼。你有N個字符串,你想比較每個字符串與其他每個字符串?或者你有N對字符串,並且想要比較每對中的兩個字符串?要麼 …? – abarnert

+0

@ user413734:我猜測你想要什麼,並將其添加到答案中。 – abarnert

0

我覺得這段代碼會解決你的問題。

listA = "A-B-C-D-E-F-H-A" 
listB = "A-B-C-F-G-H-M-P" 

newListA = listA.replace ("-", "") 
newListB = listB.replace ("-", "") 

# newListA = "ABCDEFHA" 
# newListB = "ABCFGHMP" 

i = 0 
exit = 0 
while ((i < len (newListA)) & (exit == 0)): 

    if (newListA[i] != newListB[i]): 
     exit = 1 

    i = i + 1 

print ("Character: " + str(i)) 
+0

你不得不眯起眼睛,甚至不知道這是Python ... – abarnert

+0

對不起,我是新的python。 –

相關問題