前段時間在做演算法優化改動評測時,需要將測試伺服器和線上伺服器的結果轉換成兩個list,再對兩個list進行結果驗證。在進行兩個list的距離相似度驗證時,遇到了一點小波折,在這裡和大家分享下~
問題發現:
在分析對比結果badcase時,發現在傳給pygetdisval.py兩個list:[『a』,』b』]和[『c』,』d』]時,發現返回的結果不符合預期:
pygetdisval.py**如下:
#!/usr/bin/env python
# coding=utf-8
import levenshtein,sys
a = sys.ar**[1]
b = sys.ar**[2]
#print a,b
print levenshtein.seqratio(a, b)
執行結果如下:
[@hbhly_56_129 levenshtein]# python pygetdisval.py "['a','b']" "['c','d']"
0.777777777778
而實際上,這兩個list的相似度應該是0的。那麼問題到底出現在哪呢?
列印出兩個引數看一下:
[@hbhly_56_129 levenshtein]# python pygetdisval.py "['a','b']" "['c','d']"
['a','b'] ['c','d']
0.777777777778
列印出a、b兩個型別來看一下:
[@hbhly_56_129 levenshtein]# python pygetdisval.py "['a','b']" "['c','d']"
'str'> 'str'>
0.777777777778
果然,傳入的兩個引數list會變成str。這樣的對比就不是兩個list對比了,而是兩個string的對比。而levenshtein對於兩個string的對比,levenshtein演算法對於字串是逐個字元,也就是[『a』,』b』]和[『c』,』d』]都會變成9個字元,而[ ] 』 』 , 這些字元在兩個字串中都存在,所有結果為0.77這個結果也就能說的通了。
知道問題後,解決方案自然是將兩個str轉成list。
首先試了一下強**
a = list(sys.ar**[1])
b = list(sys.ar**[2])
print type(a),type(b)
print a,b
print levenshtein.seqratio(a, b)
[@hbhly_56_129 levenshtein]# python pygetdisval.py "['a','b']" "['c','d']"
'list'> 'list'>
['[', "'", 'a', "'", ',', "'", 'b', "'", ']'] ['[', "'", 'c', "'", ',', "'", 'd', "'", ']']
0.777777777778
發現結果還是沒變,而且雖然轉成list,但是將每個字元轉成list中的元素,這顯然是不行的。
重新調整了下:
1、傳入的引數不再是兩個list,而是以 , 分割的字串:a,b和c,d
2、在py裡面先將字串轉成list,再進行距離對比。
指令碼調整如下:
#!/usr/bin/env python
# coding=utf-8
import levenshtein,sys
#b = ['a','b']
#a = ['c']
a = list(sys.ar**[1].split(','))
b = list(sys.ar**[2].split(','))
print type(a),type(b)
print a,b
print levenshtein.seqratio(a, b)
[@hbhly_56_129 levenshtein]# python pygetdisval.py "a,b" "c,d"
'list'> 'list'>
['a', 'b'] ['c', 'd']
0.0
這樣看結果就正確了。總結一下:
給py檔案傳list引數時,不能直接通過引數傳,需要先通過string傳輸,在指令碼中轉成list。
搜狗測試qq粉絲群:459645679
STL 容器(List)list 的反序排列
反轉鍊錶,比如list包含1,2,3,4,5五個元素,執行此方法後,list就包含5,4,3,2,1元素。1 include 2 include 3 4using namespace std 56 intmain 7 9 list listint num,num size num 10 cout 反...
4,list,list的列表巢狀,range
list 索引,切片 步長 li alex 123,true,1,2,3,wusir 1,2,3,小明 索引,切片,步長 print li 0 print li 2 print li 1 4 print li 5 2 print li 1 3 1 list 列表 增,刪,改,查,增 li 1,a b...
安裝網路印表機遇到的問題!
上汽客戶的一台98的機子要安裝2000上的一台印表機。一開始網路鄰居老是連線不上去。於是看了一篇文章如下 常見的網路上的芳鄰訪問問題精解 windows網路上的芳鄰互訪的基本條件 1 雙方計算機開啟,且設定了網路共享資源 2 雙方的計算機新增了 microsoft 網路檔案和列印共享 服務 3 雙方...