【发布时间】:2017-03-05 09:36:23
【问题描述】:
我对编程非常陌生,并试图将列表和元组组合成一个新列表:
- goods 是商品的元组。
- 每种商品都有对应的价格,随机生成并保存在列表中价格
- 我想要一个名为 offer 的列表,为 goods 中的每个商品分配相应的价格值
我将非常感谢一个简单的解决方案,并简要说明为什么我的尝试只返回布料的值(我输入范围 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()
【问题讨论】:
-
我无法重现您的问题。
-
范围和切片的右边界在 python 中被排除在外。所以 range(0,5) 的范围是 0 到 4 (含)。
-
你真的是说你只看到cloth的条目吗?那是我无法重现的。由于@PaulPanzer 给出的原因,确实发生了它停止在布料上。另一个问题 - 在您的循环中,您将在每次传递中创建一个新列表。如果您希望
offer在循环完成后包含所有优惠的列表,则需要附加到不断增长的列表中。 -
如果
goods和prices有相同数量的元素,考虑使用zip:for good, price in zip(goods, prices): offer = [(good, price)] -
{'commodity':price}的字典比列表列表更符合 Python 风格。也更容易查找和迭代。{commodity:price} for commodity in goods for price in prices}
标签: python list python-3.x nested-lists