我想重新排列列表中的數字成員(該列表僅包含數字),並且如果字符串形式爲num1 +字符串形式爲num2> =字符串形式爲num2 +字符串形式爲num1,那麼num1應該在num2之前(我不能直接比較數字,因爲數字可能非常大,或者數字的連接字符串格式可能非常大並且溢出)。下面是一個例子,Python的字符串比較問題列表
num1 = 3
num2 = 30
因爲NUM1 + NUM2> NUM2 + NUM1# '330'> '303'
所以,3應提前30
另一個例子中,輸入是[ 3,30,34,5,9],預期輸出是[9,5,34,3,30],並想知道如何優雅地編寫Python代碼?我們可以爲Python列表編寫一個自定義的cmp方法嗎?
看來這種方法不工作?排序後,l仍然與原始值相同?
def cmp_values(v1, v2):
_v1 = int('{0}{1}'.format(v1, v2))
_v2 = int('{0}{1}'.format(v2, v1))
return cmp(_v2, _v1)
if __name__ == "__main__":
l = [3, 30, 34, 5, 9]
sorted(l, cmp=cmp_values)
print l
在此先感謝, 林
我正在使用Python 2.7.x,並且讚賞Python 2系列的優雅解決方案。 :) –
FWIW,即使Python 3不支持'list.sort()'的'cmp'函數參數,它也可以在Python 3中執行此操作。訣竅是實現一個具有豐富比較參數的類。 [這裏](HTTP://計算器。com/a/30141885/4014959)6個月前我寫的一個答案,它包含Python 2和Python 3的這個特定比較實現。 –
另請注意[Antti Haapala的答案](http://stackoverflow.com/a/30152085/4014959),該問題使用真正的按鍵功能執行此類排序,從而使其效率更高。 –