[英]How to get the min/max in a list by using a lambda or function to get a comparison value from the item?
[英]How to get max value and min value of a given list into tuple form with out using built in max and min function from python
我是 python 新手。我有像 data = [100,50,3,205,10] 這樣的值列表,我正在嘗試編寫單個函數,該函數將在不使用 min ,max 函數的情況下將最小值和最大值放入元組
這是我的代碼,當我執行此代碼時,我得到 ma,mi 值 (3,3) - 這是不正確的。
將數據傳遞給 findmax 函數
def findmax(data):
a = data
ma = a[0]
mi = a[len(a)-1]
k = 0
while k != len(a):
for i in range(0,len(a)):
k = i+1
if ma > a[i]:
ma = a[i]
continue
for l in range(0,len(a)):
if mi > a[l]:
mi = a[l]
print (ma,mi)
打印(findmax([100,50,3,205,10]))
這可能會有所幫助。 無需兩次循環輸入數據。
data = [100,50,3,205,10]
def minmax(data):
_min = data[0]
_max = data[0]
for i in range(len(data)):
if _min > data[i]:
_min = data[i]
if _max < data[i]:
_max = data[i]
return (_min, _max)
def minmax(ls):
if len(ls) == 0:
return None, None # or some default val
mini = maxi = ls[0]
for val in ls[1:]:
if val < mini:
mini = val
elif val > maxi:
maxi = val
return mini, maxi
這處理輸入列表長度為 0 的情況。另外,我認為 if-else-if 更有意義,因為如果值小於最小值,則執行下一次檢查沒有用。
您應該只能查看列表一次並保存最小值和最大值。
data = [100,50,3,205,10]
def findmax(data):
a = data
ma = a[0]
mi = a[0]
for item in data:
if item > ma:
ma = item
if item < mi:
mi = item
return (ma,mi)
print(findmax(data))
這是一種使用 bithack 實現此目的的有趣方法,但是您從類似的東西中看到的任何性能改進都是微不足道的,以至於在可讀性和性能之間做出妥協是毫無意義的。
def findminmax(data):
mi = ma = data[0]
for value in data:
mi = value if mi ^ ((value^mi) & -(value < mi))
ma = value if value ^ ((ma^value) & -(ma < value))
return mi, ma
這是通過一次讀取兩個值來單遍查找最小值和最大值的不同方法。 它不是每個項目執行 2 次比較,而是每 2 個項目執行 3 次比較。 這也使用迭代器在輸入中移動,並使用zip_longest
地遍歷列表:
from itertools import zip_longest
def minmax(data):
it = iter(data)
_min = _max = next(it)
for a, b in zip_longest(it, it, fillvalue=_min):
if a > b:
# swap items to make a <= b
a, b = b, a
if a < _min:
_min = a
if b > _max:
_max = b
return _min, _max
當列表元素是整數或浮點數時,除非列表非常長,否則這種改進將無法衡量。 但是如果列表項是復雜的用戶對象,其中 > 和 < 操作可能涉及一些非常重要的工作量,這可能值得追求。
如果您的列表中有很多元素,Hello 循環可能會影響您的計算時間。 我建議用熊貓代替
import pandas as pd
然后使用您的數據創建一個 DataFrame:
df = pd.DataFrame({'Values':data})
使用此代碼,您將獲得最大值: print(df.loc[df['Values'].idxmax()]
你會得到:
205
希望這可以幫助 :))
您可以在一行中完成,盡管效率非常低,但具有排序和列表理解
minmax = [ (s[0],s[-1]) for s in [sorted(data)] ]
或者,更嚴重的是,您應該考慮獲得空列表的可能性。
minValue,maxValue = (data[:1] or [None])*2
for value in data[1:]:
minValue = value if value < minValue else minValue
maxValue = value if value > maxValue else maxValue
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.