如何显示最大值和最小值及其相关值
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
.
中字符串的字典顺序
min
和 max
提供了一个可选的 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.
等库
如何让它显示最大值和最小值及其相关值?我看到了 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
.
min
和 max
提供了一个可选的 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.
等库