使用列表推导式填充对象列表

5 投票
3 回答
6984 浏览
提问于 2025-04-17 05:40

我正在尝试用一个列表推导式来创建8个食材对象的列表。代码大概是这样的:

import random
ings = (('w1', 200, 25, 80),
   ('su1', 50, 55, 150),
   ('su2', 400, 100, 203),
   ('sy1', 10, 150, 355),
   ('sy2', 123, 88, 101),
   ('sy3', 225, 5, 30),
   ('sy4', 1, 44, 99),
   ('sy5', 500, 220, 300),)

class Ingredient: 
    def __init__(self, n, p, mi, ma):
        self.name = n
        self.price = p
        self.min = mi
        self.max = ma
        self.perc = random.randrange(mi, ma)

class Drink:
    def __init__(self): 
        self.ing = []

我希望得到的结果是这样的:

self.ing = [Ingredient('w1', 200, 25, 80), Ingredient('su1', 50, 55, 150) ... 
(and so it goes for the ings tuple) ]

现在,我的问题是如何用列表推导式来实现这个,或者有没有更好的方法可以做到这一点(比如在代码可读性或速度方面)?

3 个回答

0

这段代码的作用是……

首先,它会做一些准备工作,比如设置一些变量或者初始化一些东西。接着,它会进入一个循环,这个循环会重复执行某些操作,直到满足特定的条件为止。

在循环中,代码会检查一些情况,并根据这些情况来决定接下来要做什么。可能会有一些条件判断,比如如果满足某个条件,就执行某个操作,否则就执行另一个操作。

最后,当循环结束后,代码会返回一个结果,或者执行一些清理工作,确保程序能够正常结束。

总的来说,这段代码就是在做一些重复的工作,直到达到预定的目标。希望这个解释能帮助你理解这段代码的基本思路!

self.ing = [Ingredient(*options) for options in ings]
1

你应该直接创建 Ingredient 的实例,而不是先定义元组再去转换它们。

import random

class Ingredient: 
    def __init__(self, name, price, min, max):
        self.name = name
        self.price = price
        self.min = min
        self.max = max

        self.perc = random.randrange(self.min, self.max)

ingredients = [
   Ingredient('w1', 200, 25, 80),
   Ingredient('su1', 50, 55, 150),
   Ingredient('su2', 400, 100, 203),
   Ingredient('sy1', 10, 150, 355),
   Ingredient('sy2', 123, 88, 101),
   Ingredient('sy3', 225, 5, 30),
   Ingredient('sy4', 1, 44, 99),
   Ingredient('sy5', 500, 220, 300),
   ]
10

这段代码是用来处理一些数据的。它可能涉及到从一个地方获取数据,然后对这些数据进行一些操作,最后再把结果输出。具体来说,代码块中的内容可能包括如何读取数据、如何进行计算,以及如何显示结果。

如果你是编程新手,可以把这看作是一个简单的食谱:首先准备好材料(数据),然后按照步骤(代码)进行处理,最后得到你想要的成品(结果)。

记住,代码中的每一行都有它的作用,就像做饭时每一步都很重要。即使是看起来简单的操作,也可能在整个过程中起到关键作用。

[Ingredient(*ing) for ing in ings]

撰写回答