如何在此代码中取最低值?

时间:2019-05-04 02:14:55

标签: python database

你好吗? 我正在尝试采用以下代码的最低价值,我的想法是,例如,结果将是这样。国家,价格,日期

我使用python作为代码

valores= ["al[8075]['2019-05-27']", "de[2177]['2019-05-27']", "at[3946]['2019-05-27']", "be[3019]['2019-05-26']", "by[5741]['2019-05-27']", "ba[0]['2019-05-26', '2019-05-27']", "bg[3223]['2019-05-26']", "hr[4358]['2019-05-26']", "dk[5006]['2019-05-27']", "sk[4964]['2019-05-27']", "si[5253]['2019-05-26']", "es[3813]['2019-05-27']", "ee[4699]['2019-05-27']", "ru[4889]['2019-05-27']", "fi[5410]['2019-05-26']", "fr[2506]['2019-05-26']", "gi[0]['2019-05-26', '2019-05-27']", "gr[1468]['2019-05-26']", "hu[3475]['2019-05-27']", "ie[5360]['2019-05-26']", "is[0]['2019-05-26']", "it[2970]['2019-05-26']", "lv[2482]['2019-05-27']", "lt[1276]['2019-05-27']", "lu[0]['2019-05-26']", "mk[5417]['2019-05-26']", "mt[3532]['2019-05-26']", "md[6158]['2019-05-27']", "me[11080]['2019-05-26']", "no[2967]['2019-05-27']", "nl[3640]['2019-05-27']", "pl[2596]['2019-05-27']", "pt[5409]['2019-05-27']", "uk[5010]['2019-05-27']", "cz[5493]['2019-05-26']", "ro[1017]['2019-05-27']", "rs[6535]['2019-05-27']", "se[3971]['2019-05-26']", "ch[5112]['2019-05-26']", "tr[3761]['2019-05-26']", "ua[5187]['2019-05-26']"]

在这个例子中的想法就像 如您所见,国家(ro)价格(1017)日期('2019-05-27')最低

valores =“ ro [1017] ['2019-05-27']”

3 个答案:

答案 0 :(得分:0)

有多种编码方式。以下将执行此操作:

lowest = 1000000
target = " "

for i in valores:
    ix = i.find("[") + 1
    iy = i.find("]")
    value = int(i[ix:iy])
    if value < lowest and value != 0:
        lowest = value
        target = i

print(target)

它将输出

"ro[1017]['2019-05-27]"

但是,这里我假设您不希望使用0值,否则答案将是

"ba[0]['2019-05-26', '2019-05-27']"

如果要包括0,只需修改if块。

答案 1 :(得分:0)

这应该为您工作。我假设您要最低的非零价格。
我将列表中的每个字符串都通过方括号[分成子列表,并为每个项目去除多余的括号[],因此每个子列表将具有[state, price, dates]。 br /> 然后,我对价格进行排序,该价格是每个子列表的第二项,并过滤出0的价格

结果将成为过滤列表的第一个元素

import re
import re
valores= ["al[8075]['2019-05-27']", "de[2177]['2019-05-27']", "at[3946]['2019-05-27']", "be[3019]['2019-05-26']", "by[5741]['2019-05-27']", "ba[0]['2019-05-26', '2019-05-27']", "bg[3223]['2019-05-26']", "hr[4358]['2019-05-26']", "dk[5006]['2019-05-27']", "sk[4964]['2019-05-27']", "si[5253]['2019-05-26']", "es[3813]['2019-05-27']", "ee[4699]['2019-05-27']", "ru[4889]['2019-05-27']", "fi[5410]['2019-05-26']", "fr[2506]['2019-05-26']", "gi[0]['2019-05-26', '2019-05-27']", "gr[1468]['2019-05-26']", "hu[3475]['2019-05-27']", "ie[5360]['2019-05-26']", "is[0]['2019-05-26']", "it[2970]['2019-05-26']", "lv[2482]['2019-05-27']", "lt[1276]['2019-05-27']", "lu[0]['2019-05-26']", "mk[5417]['2019-05-26']", "mt[3532]['2019-05-26']", "md[6158]['2019-05-27']", "me[11080]['2019-05-26']", "no[2967]['2019-05-27']", "nl[3640]['2019-05-27']", "pl[2596]['2019-05-27']", "pt[5409]['2019-05-27']", "uk[5010]['2019-05-27']", "cz[5493]['2019-05-26']", "ro[1017]['2019-05-27']", "rs[6535]['2019-05-27']", "se[3971]['2019-05-26']", "ch[5112]['2019-05-26']", "tr[3761]['2019-05-26']", "ua[5187]['2019-05-26']"]

results = []
#Iterate through valores
for item in valores:
    #Extract elements from each string by splitting on [ and then stripping extra square brackets
    items = [it.strip('][')  for it in item.split('[')]
    results.append(items)

#Sort on the second element which is price, and filter prices with are 0
res = list(
    filter(lambda x: int(x[1]) > 0,
    sorted(results, key=lambda x:int(x[1])))
)

#This is your lowest non-zero price
print(res[0])

输出将为

['ro', '1017', "'2019-05-27'"]

答案 2 :(得分:0)

Python的max()min()函数采用关键参数。因此,每当您需要最小或最大数量时,通常都可以利用这些内置函数。您只需编写一些代码即可将值转换为最大/最小目的相应的表示形式。

def f(s):
    return int(s.split('[')[1].split(']')[0]) or float('inf')

lowest = min(valores, key = f)  # ro[1017]['2019-05-27']