返回仅返回最后一项

时间:2015-11-06 00:49:32

标签: python python-3.x

Dish = namedtuple('Dish', 'name price calories')
da = Dish("Mac N' Cheese", 8.00, 750)
db = Dish('Grilled Cheese', 6.50, 500)
dc = Dish('Hamburger', 9.50, 1000)
dd = Dish('Caeser Salad', 8.25, 650)
de = Dish('Fish Tacos', 11.25, 1150)

DL = [ da, db, dc, dd, de ]

我需要将DL中所有项目的价格改变一定百分比,但我写的函数只返回de

def Dishlist_change_price(DL: list, percentage: float) -> list:
    result = [ ]
    x = percentage/100
    for i in DL:
        y = i.price + (i.price * x)
        result = i._replace(price = y)
    return result

它的代码有什么问题才能返回最后一个Dish?

4 个答案:

答案 0 :(得分:2)

您有result = i._replace(price = y)所以在循环的每次迭代中,您将结果更改为最新的DL。您需要的是result.append(i._replace(price = y))

答案 1 :(得分:1)

使用append()方法将元素添加到列表中:

def Dishlist_change_price(DL: list, percentage: float) -> list:
    result = []
    x = percentage / 100
    for i in DL:
        y = i.price + (i.price * x)
        result.append(i._replace(price=y))
    return result

答案 2 :(得分:0)

修改最后一行以附加到数组

喜欢result.append(i._replace(price = y)

答案 3 :(得分:0)

result = i._replace(price = y)

result重新绑定到namedtuple返回的新_replace()对象。因为对于列表中的每个项目都会发生一次,所以只从函数返回最后一个项目。您应该使用list.append()代替:

result.append(i._replace(price = y))

或者更好的是,列表理解:

def Dishlist_change_price(DL: list, percentage: float) -> list:
    x = 1 + percentage/100.0
    return [d._replace(price=(d.price*x)) for d in DL]

你可能不应该使用_replace();方法名称中的前导下划线表示它适用于类中的私人使用。 (有关具有前导下划线的标识符,请参阅PEP-8)。但是,由于_replace()documented,并且在两个版本的Python中都可用,因此它不太可能消失或被更改。然而,更安全的方法是在列表理解中明确地实例化新的Dish,如下所示:

def Dishlist_change_price(DL: list, percentage: float) -> list:
    x = 1 + percentage/100.0
    return [Dish(d.name, d.price*x, d.calories) for d in DL]