如何从python列表中的最小值开始?

Posted

技术标签:

【中文标题】如何从python列表中的最小值开始?【英文标题】:How to start with the minimum value in a list in python? 【发布时间】:2021-01-27 00:39:30 【问题描述】:

我想在列表中首先获得最低价格...这是我的代码

for link in productlinks:
    try:
        r = requests.get(link, headers=headers)
        soup = BeautifulSoup(r.content, 'lxml')
        name = soup.find(
            'h1', class_='product-main__name').text.strip()
        price = soup.find(
            'p', class_='product-action__price').text.strip()
        price = price.replace('£', '')
        Aitems = 
            'price': price,
            'name': name
        
        itemlist.append(Aitems)
        print('Saving:', Aitems['price'])
    except AttributeError:
        continue
df = pd.DataFrame(itemlist)
print(min(df['price']))

输出:

Saving: 30.45
Saving: 31.95
Saving: 32.75
Saving: 32.95
Saving: 29.45
Saving: 38.95
Saving: 40.95
29.45

我可以获得该代码的最小值,但我想要整个“产品”列表,因此它从最小值开始直到最大值。

Output
                                                 name  price
0                               Suntory Torys Classic  30.45 < "I want it to start with the minimum value"
1                                        Suntory Toki  31.95
2                               Akashi Blended Whisky  32.75
3                       Tokinoka White Blended Whisky  32.95
4                    Hatozaki Blended Japanese Whisky  29.45
5                                          Nikka Days  38.95

有什么简单的方法可以做到吗?

我试过了

print(df.sort_values(by=['price']))

但它没有对最低价格进行排序。这是一种随机数。这是输出:

38                    Ichiro's Malt Wine Wood Reserve    115
37           Ichiro's Malt MWR\nMizunara Wood Reserve    115
52                Suntory Yamazaki Puncheon\nBot.2013   1200
51          Suntory Yamazaki Bourbon Barrel\nBot.2013   1200
39                       Suntory Yamazaki 12 Year Old    125
40                                Okayama Single Malt    147

【问题讨论】:

听起来要对列表进行排序? sorted()? 这能回答你的问题吗? How do I sort a list of dictionaries by a value of the dictionary? 欢迎来到 SO!查看tour。请提供类似minimal reproducible example 的内容,包括输入、最少的代码和所需的输出。听起来您只想对列表进行排序,不是吗?任何 Python 教程都应该涵盖这一点。 这可能与how to sort pandas dataframe from one column重复 【参考方案1】:

我假设您使用的是 Pandas,因为您的代码中有一个“pd.Dataframe”。 Pandas DataFrame 可以按以下方式排序

df = df.sort_values(by='price')

如果您的项目的索引应该被排序,另一种更通用的方法(不涉及 pandas)将生成一个列表。使用此 indexList,您可以对项目列表进行排序。

如何创建itemlist可以看这里How to get indices of a sorted array in Python。

使用 numpy 创建 inxList 可以解决您的问题

import numpy as np
inxList = np.argsort([item['price'] for item in itemlist])
itemlist = [itemlist[inx] for inx in inxList]

【讨论】:

df = df.sort_values(by='price') 并不是真的以最低价格排序。我将显示代码。

以上是关于如何从python列表中的最小值开始?的主要内容,如果未能解决你的问题,请参考以下文章

python 怎么取列表中最小的数

Python - 如何在列表中查找不是最小值的数字

在python中找到二维矩阵(二维)中不同列表的最小值、最大值和平均值

如何使用python从csv文件中提取最小值和最大值

查找列表中的最小元素(递归) - Python

python中怎么从列表怎么取出数字