我如何比較列表中例如,所有的字符串:比較在Python列表中的字符串和輸出字符,直到它們是相同的
"A-B-C-D-E-F-H-A",
"A-B-C-F-G-H-M-P",
和輸出,直至其性格它們是相同的:
在這個例子中以上它將是:
Character 6
並輸出最相似的字符串。
我試着用collections.Counter,但沒有奏效。
我如何比較列表中例如,所有的字符串:比較在Python列表中的字符串和輸出字符,直到它們是相同的
"A-B-C-D-E-F-H-A",
"A-B-C-F-G-H-M-P",
和輸出,直至其性格它們是相同的:
在這個例子中以上它將是:
Character 6
並輸出最相似的字符串。
我試着用collections.Counter,但沒有奏效。
你試圖通過字符步調一致兩個字符串去的性格。這是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))
我覺得這段代碼會解決你的問題。
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))
你不得不眯起眼睛,甚至不知道這是Python ... – abarnert
對不起,我是新的python。 –
這些都是字符串,而不是名單。我可以用下面的詞/字符串「carpark」和「carparkstreet」來做同樣的事情,我會得到7的值。前7個字母是相同的。 – digit
@Kasra:每個頭六個字符都是'A','','B','','C','-'。第七個是不同的,'D'對'F'。所以,6是有道理的。 – abarnert
@Kasra爲了您的問題秒鐘,問自己什麼是每個_string _...的6個字符;) – Spirine