2017-06-13 165 views
-4

假設我有一個這樣的名單:如何從字符串列表獲得最大的價值值

['v_1', 'v_2', 'v_8', 'v_5'] 

如何從這份名單得到8?

+2

你嘗試過這麼遠嗎? –

+4

請顯示您的代碼。此外,請提供更多有關您計劃進行匹配的更復雜場景的詳細信息。你打算處理雙倍,三位數字,他們將被小數分隔嗎?這些細節很重要。你真的需要提供更具體的[mcve] – idjaw

回答

1

您可以很容易地將字符串轉換爲數字,並取最大值。在列表中假設一切是形式"v_#"的其中#是整數:使用max()str.index()功能(考慮_作爲隔板)

m = max(int(x[2:]) for x in my_list) 
1
max(l, key=lambda s: int(s[2:])) 
0

解決辦法:

l = ['v_1', 'v_2', 'v_8', 'v_5'] 
m = max(v[v.index('_')+1:] for v in l) 

print(m) # 8 
0

max取關鍵字參數,讓您指定一個函數來轉換每個列表元素,然後再進行比較以找到最大值。

比較如下:

# Lexicographically, `v_8` is bigger than `v_12` 
>>> max(['v_1', 'v_2', 'v_8', 'v_5', 'v_12']) 
'v_8' 

# Numerically, 12 > 8 after striping the v_ prefix and treating 
# the remainder as an integer 
>>>>>> max(['v_1', 'v_2', 'v_8', 'v_5', 'v_12'], key=lambda x: int(x[2:])) 
'v_12'