【发布时间】:2020-06-21 10:24:12
【问题描述】:
我遇到了一个要解决的简单 python 问题:拥有 3 类项目及其对应值的列表,打印出 3 个列表中总价值低于 X 的所有组合。(代码示例可能更清晰的解释) .
我已经设法使用 zip() 和 itertools.product() 创建组合来解决这个问题,但是在输出正确的组合时,我觉得必须有一种更好、更 Pythonic 的方式来表达通过压缩产品的内部元组来输出价格总和,而无需创建 2 个显式生成器/列表(我相信在这种情况下用例无关紧要)。来自 Java 背景,我有时仍然会遇到问题,没有陷入类似 Java 的语法,这是我绝对希望使用 Python 避免的。
这是我的代码:
import itertools
# Print out all possible meal combinations under $30
main_courses = ['beef stew', 'fried fish']
price_main_courses = [28, 23]
desserts = ['ice-cream', 'cake']
price_desserts = [2, 4]
drinks = ['cola', 'wine']
price_drinks = [3, 10]
products = itertools.product(
zip(main_courses, price_main_courses),
zip(desserts, price_desserts),
zip(drinks, price_drinks)
)
for combo in products:
names = (x[0] for x in combo)
price = sum((x[1] for x in combo))
if price <= 30:
print(*names, price)
【问题讨论】: