如何在Python中追加嵌套列表?
我该如何把第二行的所有数据都除以二呢?
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 个回答
recipe[1]
会给你返回食谱列表中的第二个列表。记住,列表的索引是从0开始的。
接下来:
for row in recipe[1]:
将会用 row
来循环,row
会依次取到 recipe[1]
里面每一个值。
你现在在循环的部分搞错了。当你使用这个语句:for i in list
时,i
会被当作一个新变量创建(就像你直接写了i = 5
一样)。所以在这个时候,i
并没有办法获取元素5(而且5也不是一个有效的变量名)。
要解决你的循环问题,可以试试:
for row in mylist[index]:
这样会在mylist
的指定索引位置上循环,记住列表是从0开始计数的(你的数字在索引1的位置)。
不过,你很快会遇到另一个问题,就是更新数组中的值,因为你现在的做法会创建一个副本。一个简单的解决办法是使用enumerate
(不过我就不提前告诉你怎么用,留给你自己去尝试!)
你还可以用 列表推导式,这样就能在一行代码里完成,而不需要用 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。
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
而且不需要搞那些索引数字之类的麻烦。