python - 在 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。不在偏好中的成分会被忽略。
解决方案
这是另一种方法,虽然我将结构更改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]
推荐阅读
- azure - Azure RM VM 硬盘
- firebase - 如何使用 Firebase 云功能从 http 请求中获取数据?
- python - Python - 元素明智字符串连接的双循环
- angular - Angular 6 Datatables为按钮添加点击事件
- java - JavaFX LoadException,但一切看起来都很完美
- sass - 自定义 SCSS 文件不适用于 Bigcommerce Stencil
- ios - 为什么 CGPath 包含测试有时会在路径外的某个点上返回 true?
- python - wxPython 菜单打开位置
- php - 在 null 上调用成员函数 hasRole()
- python - 如何每月为银行账户余额增加一次利息?