如何在Python中追加嵌套列表?

0 投票
4 回答
2018 浏览
提问于 2025-04-29 19:23

我该如何把第二行的所有数据都除以二呢?

recipe  = [
    ['eggs', 'flour', 'meat'],
    [4, 250, 5],
    ['large','grams', 'kg'],
]

我试着从这个开始:

for row[2] in recipe:

但是我遇到了一个错误,提示:

追踪记录(最近的调用在最前面):

文件 "/Users/g/Documents/reicpe.py",第 7 行,在 for row[2] in meat_pie:

NameError: name 'row' is not defined

暂无标签

4 个回答

0

recipe[1] 会给你返回食谱列表中的第二个列表。记住,列表的索引是从0开始的。

接下来:

for row in recipe[1]:

将会用 row 来循环,row 会依次取到 recipe[1] 里面每一个值。

0

你现在在循环的部分搞错了。当你使用这个语句:for i in list时,i会被当作一个新变量创建(就像你直接写了i = 5一样)。所以在这个时候,i并没有办法获取元素5(而且5也不是一个有效的变量名)。

要解决你的循环问题,可以试试:

for row in mylist[index]:

这样会在mylist的指定索引位置上循环,记住列表是从0开始计数的(你的数字在索引1的位置)。

不过,你很快会遇到另一个问题,就是更新数组中的值,因为你现在的做法会创建一个副本。一个简单的解决办法是使用enumerate(不过我就不提前告诉你怎么用,留给你自己去尝试!)

3

你还可以用 列表推导式,这样就能在一行代码里完成,而不需要用 for 循环

recipe[1] = [num / 2 for num in recipe[1]] 

代码解释 [num / 2 for num in recipe[1]]

  • recipe[1]:这是一个列表,它是 recipe 列表中的第二个元素。

    recipe 的第二个元素是:[4, 250, 5]

  • for num in recipe[1]:这意味着我们要遍历 recipe[1] 中的每个元素,所以 num 是一个变量,它的值会在每次循环中随着列表元素的变化而变化。

  • num / 2:很明显,我们是把 num 除以 2。

1
recipe  = [
    ['eggs', 'flour', 'meat'],
    [4, 250, 5],
    ['large','grams', 'kg'],
]

如果不考虑其他,这样用字典会更好。如果你想把数量减半,并且改变你存储的内容:

for quantity, index in enumerate(recipe[1])
    recipe[1][index] = quantity/2

更好的方法是使用字典,这样你可以给数据项起名字:

recipe = {"eggs":{"quantity":4, "measurement":"large"},
         "flour":{"quantity":250,"measurement":"grams"}, 
         "meat":{"quantity":5,"measurement":"kg"}}

现在把数量减半就变得很简单:

for ingredient in recipe:
    recipe[ingredient]["quantity"] = recipe[ingredient]["quantity"]/2

打印食谱也变得简单:

for ingredient in recipe:
    print "{} {} {}".format(recipe[ingredient]["quantity"], recipe[ingredient]["measurement"], ingredient)

这样就能生成:

4 large eggs
250 grams flour
5 kg meat

而且不需要搞那些索引数字之类的麻烦。

撰写回答