对For/if/else循环使用列表推导

use*_*569 0 python list-comprehension

从本质上讲,我写了一组不同的代码,这些代码将给定商店的名称和购物清单的总价调用在一起.

由于元组只使用第一个元素进行比较(除非它们是相等的)我已经设置它们以便总值是第一个.

它将循环遍历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
Run Code Online (Sandbox Code Playgroud)

Joh*_*n Y 5

在Python中查找集合的最大值的惯用方法是max内置函数:

bestprice = max(myprices)[1]  # index of 1 to get the shop name
Run Code Online (Sandbox Code Playgroud)

你的例子实际上没有用于循环或理解.我不明白为什么你最初bestprice希望它是一个(单个)字符串而不是列表时预分配为空列表.

如果您确实想要一个列表,那么您可以替换以下循环:

result = []
for elem in collection:
    if cond:
        result.append(myfunc(elem))
Run Code Online (Sandbox Code Playgroud)

具有以下列表理解:

result = [myfunc(elem) for elem in collection if cond]
Run Code Online (Sandbox Code Playgroud)