首页 > 解决方案 > 在 1 行中迭代二维列表

问题描述

对于 2D 列表 [["bacon", "banana"], ["ham", "salami", "cheese"]] 我想迭代为 "bacon",然后是 "banana",然后是 "ham" 等。

sandwiches = [["bacon", "banana"], ["ham", "salami", "cheese"]]
preferences = ["bacon", 5, "ham", -2, "salami", 1]

三明治阵列中,有2个三明治,培根+香蕉和火腿+意大利腊肠+奶酪。我想通过做这样的事情来知道每个三明治的分数(不起作用,但显示了我想做的事情):

sandwichscores = [0 for i in sandwiches]
sandwichscores = [+preferences[preferences.index(j)+1] for j in i in sandwiches if
j in preferences]

但是对于三明治中的 j in i 当然是行不通的。我试过弄乱fors和ins的顺序,但没有得到任何结果。怎么可能做到这一点?

例如,我想要的输出是:

sandwichscores = [5, -1]

由于成分在第一个三明治中的综合得分为 5,在第二个三明治中为 -1。不在偏好中的成分会被忽略。

标签: pythonarrayslistfor-loopmultidimensional-array

解决方案


这是另一种方法,虽然我将结构更改preferences为字典,但更实用且更易于使用:

sandwiches = [["bacon", "banana"], ["ham", "salami", "cheese"]]
preferences = {"bacon" : 5, "ham" : -2, "salami" : 1}

scores = [sum(preferences.get(ingredient,0) for ingredient in sandwich) for sandwich in sandwiches]
print(scores)

输出:

[5, -1]

推荐阅读