如何显示最大值和最小值及其相关值

How to display max and min with its relevant values

如何让它显示最大值和最小值及其相关值?我看到了 lambda 的答案,但我不明白。请帮忙。谢谢!

with open('life-expectancy.csv', "r") as life_expectancy:
next(life_expectancy)

country = []
codes = []
years = []
expectancies = []

for data in life_expectancy:
    clean_data = data.strip()
    split_data = clean_data.split(',')

    entity  = split_data[0]
    code = split_data[1]
    year = (split_data[2])
    expectancy  = float(split_data[3])

    country.append(split_data[0])
    codes.append(split_data[1])
    years.append(int(split_data[2]))
    expectancies.append(float(split_data[3]))

这部分显示个人的最大值和最小值,但它们彼此无关——期望值、实体和年份。

print(f'The overall max life expectancy is: {max(expectancies):.2f} from {max(entity)} in {max(years)}')
print(f'The overall min life expectancy is: {min(expectancies)} from {min(entity)} in {min(years)}')

我建议创建一个 class,让所有信息相互关联。那么你只有一个 class 的实例列表。当您找到最大期望值时,该对象也会携带所有其他相关数据。

另一种方法(可能更简单)是获取 max(expectancies) 的索引,然后在所有其他列表中查看该索引。但是你必须确保所有列表包含相同数量的项目。

使用 numpy 时,您的打印代码可能如下所示:

import numpy as np

max_index = np.argmax(expectancy)
min_index = np.argmin(expectancy)

print(f'The overall max life expectancy is: {expectancies[max_index]:.2f} from {entity[max_index]} in {years[max_index]}')
print(f'The overall min life expectancy is: {expectancies[min_index]} from {entity[min_index]} in {years[min_index]}')

确实,问题是当您调用 min(entity)max(entity) 时,Python 不知道您在谈论预期寿命。最小值或最大值基于 entity.

中字符串的字典顺序

minmax 提供了一个可选的 key 参数,它允许您定义应用于确定最小或最大元素的顺序。

作为一个简单的例子,如果我们有一个字符串数组 strings 并且想要获得 最长的 字符串,我们可以这样做:

max(strings, key=lambda x: len(x))

(是的,我知道我们可以做 key=len 这里,但我试图让事情简单并与我的其余部分保持一致答案。)

这告诉 Python 我们希望最大值基于每个字符串的长度。 lambda 告诉 Python 对数组的每个元素做什么以确定其顺序。

因为您的每一列数据都有一个单独的数组,我们在实体和预期寿命之间的唯一关联是它们的指数,即 entity[i] 的预期寿命是 expectancies[i]。因此,我们需要找到具有最小和最大预期寿命的 index

我们可以通过以下方式做到这一点:

# find the index of the entity with the minimum life expectancy
min_idx = min(range(0, len(entity)), key=lambda i: expectancies[i])
min_entity = entity[min_idx]
min_expectancy = expectancies[min_idx]

# same for maximum
max_idx = max(range(0, len(entity)), key=lambda i: expectancies[i])
max_entity = entity[max_idx]
max_expectancy = expectancies[max_idx]

正如其他人所暗示的那样,最好重构您的代码以便将相关数据存储在一起,或者使用 Pandas.

等库