2014-04-07 78 views
0

我需要打印與最高價格(10.0)相匹配的所有商品的名稱作爲最高價格清單 我的問題是,即使價格與最高價格相匹配,也不會追加。清單是[itemName,價格]如何將列表中的項目添加到另一個列表?

inventoryList = [['Steak', ' 10'], ['Milk', ' 2'], ['Fruits', ' 10'], ['Canned Corn', ' 0.50']] 
highestPriceItem = 10.0 
highestPriceList = [] 

for item in inventoryList: 
    if item[1] == highestPriceItem: 
     highestPriceList.append(item[0]) 
print ("Item with highest wholsesale price: ",highestPriceList) 

有什麼建議嗎?

回答

1

你比較字符串,其中' 10'是不一樣的東西10.0。使用數字來代替:

inventoryList = [['Steak', 10], ['Milk', 2], ['Fruits', 10], ['Canned Corn', 0.50]] 
highestPriceItem = 10.0 
highestPriceList = [] 

for item in inventoryList: 
    if item[1] == highestPriceItem: 
     highestPriceList.append(item[0]) 
print ("Item with highest wholsesale price: ",highestPriceList) 

或者,如果在問題未示出的一個原因,你需要不斷的字符串,那麼至少比作爲數字:

inventoryList = [['Steak', ' 10'], ['Milk', ' 2'], ['Fruits', ' 10'], ['Canned Corn', ' 0.50']] 
highestPriceItem = 10.0 
highestPriceList = [] 

for item in inventoryList: 
    if float(item[1]) == highestPriceItem: 
     highestPriceList.append(item[0]) 
print ("Item with highest wholsesale price: ",highestPriceList) 
+0

第二個建議對我更好,但我如何才能打印higestPriceList作爲普通單詞而不是列表格式(['Steak','Fruits 「])? – Frangello

+0

添加一個'*'將列表解壓縮爲參數,如下所示:'print(「具有最高價值的商品:」,* highestPriceList)' – mhlester

0
In [66]: inventoryList = [['Steak', ' 10'], ['Milk', ' 2'], ['Fruits', ' 10'], ['Canned Corn', ' 0.50']] 

In [67]: maxPrice = max(float(L[1]) for L in inventoryList) 

In [68]: highestPriceList = [L for L in inventoryList if float(L[1]) == maxPrice] 

In [69]: highestPriceList 
Out[69]: [['Steak', ' 10'], ['Fruits', ' 10']] 
+0

我已經有最高的價格,我不需要行[67]來計算價格的最大值。 L代表什麼? – Frangello

+0

使用'L'的方式我所做的就像是說'for L in inventoryList' – inspectorG4dget

0

你的價格清單一個字符串,第一個字符爲空格。與浮點數10.0進行比較。結果,循環中的每個if都是假的。它應該是

inventoryList = [['Steak', '10.0'], ['Milk', '2.0'], ['Fruits', '10.0'], ['Canned Corn', '0.50']] 
highestPriceItem = 10.0 
highestPriceList = [] 

for item in inventoryList: 
    if float(item[1]) == highestPriceItem: 
    highestPriceList.append(item[0]) # Only the item is appended and not the price 
print ("Item with highest wholsesale price: ",highestPriceList) 

或者,將價格更改爲浮動在列表中。如果您需要進一步操作,那麼以後可能會節省時間。

+0

該列表由我沒有顯示的其餘代碼創建,所以它使它變得很複雜,變成一個浮動,但謝謝你 – Frangello

+0

@ user3311946然後使用替代你說如果float(item [1])== highestPriceItem – sabbahillel

+0

@ user3311946我改變了順序,以便它顯示使用if中的float然後提到如果需要進一步處理數字,則更改列表中的價格。 – sabbahillel

0

以下將是一個體面的(考慮到你的限制)這樣做。你的結構inventoryList保持不變,highestPriceItem也可以保持當前的形式。我使用了list comprehension而不是for statement,以使其更有效率,更重要的是更具可讀性。

inventoryList = [['Steak', ' 10'], ['Milk', ' 2'], ['Fruits', ' 10'], ['Canned Corn', ' 0.50']] 
highestPriceItem = 10.0 
highestPriceList = [item[0] for item in inventoryList if float(item[1]) == highestPriceItem] 

print ("Item with highest wholsesale price: ", highestPriceList) 
相關問題