2017-03-05 45 views
0

我很新的節目,並試圖列表和元組組合成一個新的列表:結合元組和列表到列表中,列出了

  • 商品是商品的一個元組。
  • 每一件商品都有一個相應的價格,隨機生成並保存在列表中價格
  • 我想叫報價名單從商品

分配相應的價格值每件商品我會非常感謝一個簡單的解決方案,也是一個簡單的解釋,爲什麼我的嘗試只返回一個值布(我進入了範圍0:5,但它似乎只是返回元素4,布和它的價格)

import random 

goods = ("Silk", "Gems", "Wool", "Hide", "Cloth", "Iron") 

def set_prices(): 

    price_s = random.randrange(180,300) 
    price_g = random.randrange(250,800) 
    price_w = random.randrange(1,5) 
    price_h = random.randrange(5,18) 
    price_c = random.randrange(20,50) 
    price_i = random.randrange(50,150) 

    prices = [price_s,price_g,price_w,price_h,price_c,price_i] 

    for n in range (0,5): 
     offer = [(goods[n],prices[n])] 
     print (offer) 

set_prices() 
+1

我無法重現您的問題。 –

+0

範圍和切片的右邊界在Python中被慣例排除。所以範圍(0,5)從0到4運行。 –

+0

你真的認爲你*只*看到布條?這是我無法重現的。發生什麼事情是因爲@PaulPanzer給出的理由,它會在布料上停下來。另一個問題 - 在你的循環中,你在每次傳遞中都會創建一個新列表。如果您希望'offer'在循環完成後包含所有商品的列表,那麼您需要追加到不斷增長的列表中。 –

回答

2

問題是range(0,5)只會產生0,1,2,3,4,因爲5被排除在外。一個簡單的解決方案是使用range(len(goods)),生產一系列具有相同數量的貨物的價值:

for n in range(len(goods)): 
    ... 

或者,你可以使用zip通過兩份名單同時迭代:

for offer in zip(goods,prices): 
    print(offer) 

這將產生作爲元組輸出:

('Silk', 276) 
('Gems', 486) 
... 

但可以轉換爲與list(offer)列表:

['Silk', 188] 
['Gems', 620] 
['Wool', 2] 
['Hide', 14] 
['Cloth', 38] 
['Iron', 130] 
+0

'zip(l1,l2)'比'range(len(...))'好得多,不笨的成語' – smci

+0

是的,它看起來像一個很多清潔劑。 – Trelzevir

+0

實際上,'{'''''''價格}是一個比列表更多的Pythonic成語。也更容易查找,並迭代。商品的價格{商品:價格}} – smci