我試圖找到對應于一天的最大值/最小值。
list1 包括一周中的所有 7 天。串列二是空的 [] 我有一個回圈,它的迭代次數與串列 1,(7) 的 len 一樣多,它要求用戶輸入他們每天進行活動的小時數。如何列印具有最大值/最小值的日期?
count = 0
list1 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
list2 = []
total = 0
for x in range(len(list1)):
try:
num = float(input(f"Enter amount of hours of exercise for {list1[x]}: "))
list2.append(num)
total = num
except:
print("Please enter a number.")
sys.exit()
total = sum(list2)
#THESE LINES ARE WHERE I AM HAVING DIFFICULTY!
mamimum = max(list2[list1])
minimum = min(list2[list1])
print("Day with most amount of exercise: ", maximum)
print("Day with least amount of exercise: ", minimum)
uj5u.com熱心網友回復:
只需由zipping他們從值列印max和min鍵值對中創建一個字典
count = 0
import sys
list1 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
list2 = []
total = 0
for x in range(len(list1)):
try:
num = float(input(f"Enter amount of hours of exercise for {list1[x]}: "))
list2.append(num)
total = num
except:
print("Please enter a number.")
sys.exit()
total = sum(list2)
#THESE LINES ARE WHERE I AM HAVING DIFFICULTY!
print(list2)
zipper =dict(zip(list1, list2))
print("Day with most amount of exercise: ", [k for k, v in zipper.items() if v == max(zipper.values())])
print("Day with least amount of exercise: ", [k for k, v in zipper.items() if v == min(zipper.values())])
輸出 #
Day with most amount of exercise: ['Sunday', 'Monday']
Day with least amount of exercise: ['Tuesday']
uj5u.com熱心網友回復:
一旦你有了 list1 和 list2 (這不是很成功的名字),你想要的是 list2 的最大值/最小值的索引。這分別稱為 argmax/argmin,可以使用np.argmax(或np.argmin) 輕松獲得。
但是,使用“干凈”python 也很簡單,沒有不必要的匯入,例如使用key內置max( min) 函式的引數:
max_index = max(range(7), key=lambda i: list2[i])
min_index = min(range(7), key=lambda i: list2[i])
如果你有索引,那么你就有了最大/最小天數和數量:
print(f'Maximal amount of exercise was {list2[max_index]}, which was obtained on {list1[max_index]}')
print(f'Minimal amount of exercise was {list2[min_index]}, which was obtained on {list1[min_index]}')
range(len(list1))在不相關的注釋上,請注意,如果您這樣做只是為了獲得然后使用的索引,則不需要回圈list1[x]. 你可以直接回圈過去list1。
因此,您的代碼會更好一些,如下所示(在我使用時更改名稱):
count = 0
week_days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
exercise_amounts = []
total = 0
for wd in week_days:
try:
num = float(input(f"Enter amount of hours of exercise for {wd}: "))
exercise_amounts.append(num)
total = num
except:
print("Please enter a number.")
sys.exit()
total = sum(exercise_amounts)
max_index = max(range(7), key=lambda i: exercise_amounts[i])
min_index = min(range(7), key=lambda i: exercise_amounts[i])
print(f'Maximal amount of exercise was {exercise_amounts[max_index]}, which was obtained on {week_days[max_index]}')
print(f'Minimal amount of exercise was {exercise_amounts[min_index]}, which was obtained on {week_days[min_index]}')
uj5u.com熱心網友回復:
首先您可以在串列 2 中找到最大值和最小值的索引,然后列印串列 1 中的值:
count = 0
list1 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
list2 = []
total = 0
for x in range(len(list1)):
try:
num = float(input(f"Enter amount of hours of exercise for {list1[x]}: "))
list2.append(num)
total = num
except:
print("Please enter a number.")
total = sum(list2)
#THESE LINES ARE WHERE I AM HAVING DIFFICULTY!
max_index = list2.index((max(list2)))
min_index = list2.index((min(list2)))
print("Day with most amount of exercise: ", list1[max_index])
print("Day with least amount of exercise: ", list1[min_index])
如果您有多個 Max 或 Min 值:
max_days = [list1[i] for i, j in enumerate(list2) if j == max(list2)]
min_days = [list1[i] for i, j in enumerate(list2) if j == min(list2)]
print("Day with most amount of exercise: ", max_days)
print("Day with least amount of exercise: ", min_days)
uj5u.com熱心網友回復:
你的方法也很有效。這是您的方法的修復:
count = 0
list1 = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
list2 = []
total = 0
for x in range(len(list1)):
try:
num = float(input(f"Enter amount of hours of exercise for {list1[x]}: "))
list2.append(num)
total = num
except:
print("Please enter a number.")
sys.exit()
total = sum(list2)
maximum = max(list2) # gets the max value corresponding to list2
minimum = min(list2) # gets the min value corresponding to list2
# Compatibility for two max/min values:
def moreThanTwo(value, lst):
return [i for i, j in enumerate(lst) if j == value] # returns the index with max/min values
maximum = [list1[idx] for idx in moreThanTwo(maximum, list2)] # gets the max values
minimum = [list1[idx] for idx in moreThanTwo(minimum, list2)] # gets the min values
print(f"Day with most amount of exercise: {', '.join(maximum)}")
print(f"Day with least amount of exercise: {', '.join(minimum)}")
但是,我建議使用這樣的dictionary方法:
days = {"Sunday": 0, "Monday": 0, "Tuesday": 0, "Wednesday": 0, "Thursday": 0, "Friday": 0, "Saturday": 0} # day : time
for key, value in days.items():
try:
days[key] = float(input(f"Enter amount of hours of exercise for {key}: ")) # update value in dict
except:
print("Please enter a number.")
exit() # you don't need sys.exit()
maximum = max(days.values()) # gets the max value corresponding to days
minimum = min(days.values()) # gets the min value corresponding to days
# Compatibility for two max/min values:
def moreThanTwo(value, days):
return [k for k, v in days.items() if v == value] # returns the day with max/min values
maximum = moreThanTwo(maximum, days) # gets the max values
minimum = moreThanTwo(minimum, days) # gets the min values
print(f"Day with most amount of exercise: {', '.join(maximum)}")
print(f"Day with least amount of exercise: {', '.join(minimum)}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/532423.html
標籤:Python列表循环
