python-在数组中返回最大号码.错误



我有一个Python脚本,该脚本通过FTP连接到网站,并列出了网站上的当前版本编号。我创建了一个数组来保存版本编号,直到脚本将最大数字从数组中挑选出来,并告诉我它是什么。例如,我的数组通常看起来像这样:

array = ['1.04','1.6','1.14']

所以我使用了...

max_in_array = max(array) 

返回数组中的最大值。

不幸的是,我收到的" 1.6"是最大的数字,而" 1.14"是最新的版本编号。我唯一可以考虑的另一件事是切断" 1."。从数组列表中,我收到:

array = ['04','6','14']

,然后将其粘贴回完整版本号。但是由于该网站包含许多版本,例如" 2.02.04"one_answers" 1.14.01",所以我不知道如何有效地做到这一点。

任何帮助将不胜感激!


os.chdir("./gnu/"+_package)
pope = len(_package) + 1 ## Cuts off name of program
char = len(_package) - 12 ## Cuts off extension ".tar.gz"
for tok in glob.glob("*.tar.gz"):
    token.append(tok) ## Appends name to array
    bork = max(token) ## Gets max version number (sometimes useless)
    print bork
    char = len(bork) - 7
for _gnu in glob.glob("*.tar.gz"): ## Finds only matches with .tar.gz
    _gnuapp.append(_gnu[pope:char]) ## Appends version number to array
    spoke = max(_gnuapp) ## Gets max version number
    _ver = _package + "-" + spoke + ".tar.gz" ## Compiles the package name, ver #, and extension
    _down(_user, _ver, _package) ## Opens information in download module 

编辑:对不起,首先误解了问题 - 有关比较版本号的一些方法,请参见此答案。在其中取下第二个答案(建议使用distutils.versionStrictVersion),您可以尝试以下方法:

In [3]: from distutils.version import StrictVersion
In [4]: s = ['1.04','1.6','1.14', '2.02.04', '1.14.01']
In [5]: max(s, key=StrictVersion)
Out[5]: '2.02.04'

要注意的一件事是您实际上是在比较字符串而不是数字。您可以做的一件事以确保您比较数字本身(之后忽略您想与该项目进行的数字)是为max函数提供钥匙:

In [1]: s = ['1.04','1.6','1.14']
In [2]: max(s, key=float)
Out[2]: '1.6'

由于您希望比较浮点值(而不是字符串),因此它比较了字符串的浮点当量。但是,最好在继续之前将它们转换为浮子:

In [4]: s = ['1.04','1.6','1.14']
In [5]: s_floats = [float(x) for x in s]
In [6]: s_floats
Out[7]: [1.04, 1.6000000000000001, 1.1399999999999999]

您可以按照您的期望使用MAX:

In [9]: max(s_floats)
Out[9]: 1.6000000000000001

您需要比较主要版本,然后是次要版本。Max函数接受一个关键参数,您可以通过将字符串转换为主要版本和次要版本

来修改可比性。
>>> max(array, key = lambda e: map(int, e.split(".")))
'1.14'

您可以使用一个列表,其中每个程序版本将作为另一个列表存储,因此:

list = [[1,14],[1,6],[1,4]

每个版本组合是内部列表的一部分。

您可以这样对其进行排序:

sortedlist = sorted(sorted(sorted(list, key=lambda x: x[2]), key=lambda x: x[1]),key=lambda x: x[0])

在版本编号中,您必须播放不同的,拆分数字并通过mayor_version和minor_version进行比较。

我很确定这次有人解决了...

Google搜索...

是的!确实是Python的家伙。检查一下:

http://pydoc.org/get.cgi/usr/local/lib/python2.5/distutils/version.py.py

最新更新