对 For/if/else 循环使用列表理解
Using list comprehension for a For/if/else loop
本质上,我编写了一组不同的代码,将给定商店的名称和杂货清单的总价结合在一起,如果它是在那里购买的话。
由于元组仅使用第一个元素进行比较(除非它们相等),我将它们设置为总值在前。
它将遍历 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
这确实不是您在 C 中的做法,也不应该是您在 Python 中的做法。在任何语言中,都有几种方法可以做到这一点;要么你保持一个变量跟踪到目前为止的最高值,并在你看到更高的值时更新它:
highestr = (0,)
for item in myprices:
if item[0] > highest_so_far[0]:
highest = item
或者您只需降序排序并取第一个:
myprices.sort(reverse=True)
highest = myprices[0]
在 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]
本质上,我编写了一组不同的代码,将给定商店的名称和杂货清单的总价结合在一起,如果它是在那里购买的话。
由于元组仅使用第一个元素进行比较(除非它们相等),我将它们设置为总值在前。
它将遍历 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
这确实不是您在 C 中的做法,也不应该是您在 Python 中的做法。在任何语言中,都有几种方法可以做到这一点;要么你保持一个变量跟踪到目前为止的最高值,并在你看到更高的值时更新它:
highestr = (0,)
for item in myprices:
if item[0] > highest_so_far[0]:
highest = item
或者您只需降序排序并取第一个:
myprices.sort(reverse=True)
highest = myprices[0]
在 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]