列印list list對比遇到的坑

2021-10-12 07:45:58 字數 3550 閱讀 7519

前段時間在做演算法優化改動評測時,需要將測試伺服器和線上伺服器的結果轉換成兩個list,再對兩個list進行結果驗證。在進行兩個list的距離相似度驗證時,遇到了一點小波折,在這裡和大家分享下~

問題發現:

在分析對比結果badcase時,發現在傳給pygetdisval.py兩個list:[『a』,』b』]和[『c』,』d』]時,發現返回的結果不符合預期:

pygetdisval.py**如下:

#!/usr/bin/env python# coding=utf-8import levenshtein,sysa = 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-8import 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 雙方...