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?
答案 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]