基本上,我写了一组不同的代码,这些代码将给定商店的名称和购物清单的总价(如果是在那里购买的话)一起调用。
由于元组仅使用第一个元素进行比较(除非它们相等)我已经设置它们以使总值成为第一个。
它将循环遍历myprices列表长度的索引,并将比较当前元组是否大于下一个元组。
如果它收到索引超出范围错误,它将通过。
我使用单个元组中的[0]和[1]位置来命名该程序是否正在访问商店的价格或名称。
它将比较元组的价格(自动),然后它将使bestprice =具有最佳价格的商店的名称。
这实际上是C编程被移植到python中。
我发现pythonic方式表达单个循环,但不是if / else语句,而不是两者的组合。
你有任何改进的建议,或者我正在接受的任何范例,可以在python中替换。
myprices = [(6, shop1), (10, shop2)]
bestprice = []
for i in range(len(myprices)):
try:
if myprices[i] < myprices[i+1]:
bestprice = myprice[i][1]
else:
bestprice = myprices [i+1][1]
except IndexError:
pass
答案 0 :(得分:5)
在Python中查找集合最大值的惯用方法是max
内置函数:
bestprice = max(myprices)[1] # index of 1 to get the shop name
你的例子实际上没有用于循环或理解。我不明白为什么你预先将bestprice
预分配为空列表,最终你希望它是一个(单个)字符串,而不是列表。
如果您实际 想要一个列表,那么您可以替换以下循环:
result = []
for elem in collection:
if cond:
result.append(myfunc(elem))
具有以下列表理解:
result = [myfunc(elem) for elem in collection if cond]
答案 1 :(得分:1)
在C中你真的不怎么做,也不应该是用Python做的。在任何语言中,有几种方法可以做到这一点;要么保持变量跟踪到目前为止最高,并在看到更高的变量时更新它:
highestr = (0,)
for item in myprices:
if item[0] > highest_so_far[0]:
highest = item
或者您只需按降序排序并选择第一个:
myprices.sort(reverse=True)
highest = myprices[0]