我有一個格式串列:
my_list= [['ezis', 0], ['camera', 15], ['size', 0], ['esu', 16], ['take', 4],
['pictur', 26], ['tnaw', 46], ['thing', 49], ['ilno', 8],.....]
并且我想查看末尾的數字是否與字串的反向匹配(例如,在此串列中['ezis', 0]并且['size', 0]會相互匹配,因為它們的最終值都是 0,反向的“大小”是“ezis”。然后我想計算這些匹配的數量。
到目前為止,我有:
matches = 0
for x,y in my_list:
if (x[0]==y[0][::-1]) and x[1]==y[1]:
matches =1 #a match is found
但我收到一個錯誤,不知道還有什么方法可以解決這個問題
有人可以幫忙嗎?
uj5u.com熱心網友回復:
嘗試:
>>> sum(1 for k, v in dict(my_list).items() if v==dict(my_list).get(k[::-1]))
2
uj5u.com熱心網友回復:
如果你想計數size和ezis為 1,你可以這樣做:
d = {}
for x,y in my_list:
d.setdefault(y, set()).add(x)
matches = 0
for k,v in d.items():
x = v.pop()
if x[::-1] in v:
matches = 1
uj5u.com熱心網友回復:
您可以使用計數器類(來自集合)來獲取字典中的所有計數。
如果您希望每個“重復”只出現一次,同時包含兩個字串順序的計數:
my_list= [['ezis', 0], ['camera', 15], ['size', 0], ['esu', 16], ['take', 4],
['pictur', 26], ['tnaw', 46], ['thing', 49], ['ilno', 8]]
from collections import Counter
counts = Counter((max(s,s[::-1]),n) for s,n in my_list)
print(counts)
Counter({('size', 0): 2, ('camera', 15): 1, ('use', 16): 1, ('take', 4): 1,
('rutcip', 26): 1, ('want', 46): 1, ('thing', 49): 1,
('onli', 8): 1})
如果您只想要匹配對的計數:
counts = Counter(map(tuple,my_list))
revCounts = { (s,n):counts[s[::-1],n] for s,n in counts if counts[s[::-1],n]}
print(revCounts)
{('ezis', 0): 1, ('size', 0): 1}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392772.html
