Python 在列表中查找最新版本

Python 在列表中查找最新版本,python,python-3.x,data-structures,version,Python,Python 3.x,Data Structures,Version,我可以在文件夹中搜索所有版本日志行,但我试图在列表中选择最新版本,但我不知道如何选择,因为列表中的元素同时包含字符和数字 下面是我查找和创建名为matched_lines的列表的代码,该列表包含说明日志版本号的所有行。我希望从创建的列表中找到最新版本,并将此最新版本与日志之外的实际最新版本进行比较。例如,生成的列表将包括: ['Version2.13.1.1'、'Version2.12.1.0'、'Version2.10.1.4'] 在本例中,我希望选择“Version2.13.1.1”,并将其

我可以在文件夹中搜索所有版本日志行,但我试图在列表中选择最新版本,但我不知道如何选择,因为列表中的元素同时包含字符和数字

下面是我查找和创建名为matched_lines的列表的代码,该列表包含说明日志版本号的所有行。我希望从创建的列表中找到最新版本,并将此最新版本与日志之外的实际最新版本进行比较。例如,生成的列表将包括:

['Version2.13.1.1'、'Version2.12.1.0'、'Version2.10.1.4']

在本例中,我希望选择“Version2.13.1.1”,并将其与日志中的最新版本号进行比较,例如,“Version2.14.1.0”


在列表中找到最新版本后,我希望将其与文件夹外的实际最新版本号进行比较。

您可以对列表进行排序,然后获得最大(最后)项。但是您需要自然排序,例如:
“Version2.4.1.1”

我在中找到了一个函数来执行此操作。这里有一个例子说明

import re

def sorted_nicely(an_iterable):
    """ Sorts the given iterable in the way that is expected.

    Required arguments:
    an_iterable -- The iterable to be sorted.

    """
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    return sorted(an_iterable, key = alphanum_key)

version_list = ['Version 2.13.1.1', 'Version 2.123.1.0', 'Version 2.4.1.4']

print(sorted_nicely(version_list)[-1])  # "Version 2.123.1.1"

首先,您需要从字符串中捕获版本号,并将其转换为
int
元组,格式为
(大调、小调、小调)
。将其用作
max
功能的
键将返回最新版本

密码 实例
它可以很容易地通过与电流相关的方式实现

来自打包导入版本的
>>
>>>
>>>vers=['Version2.13.1.1'、'Version2.12.1.0'、'Version2.10.1.4']
>>>
>>>对于n,枚举中的i(vers):
...     vers[n]=version.parse(i)
...
>>>最大值(vers)
>>>

您的代码在语法上无效;我假设你有一个字符串列表,但要澄清其他情况。另外,请说明您所做的工作以及具体问题是什么,不要还原合法的编辑。您应该发布您的代码。因此,投票被否决。此外,我还没有处理过日志文件,但我很高兴它们必须包含某种形式的时间戳。“使用示例正则表达式查找版本号”?!
import re

def sorted_nicely(an_iterable):
    """ Sorts the given iterable in the way that is expected.

    Required arguments:
    an_iterable -- The iterable to be sorted.

    """
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    return sorted(an_iterable, key = alphanum_key)

version_list = ['Version 2.13.1.1', 'Version 2.123.1.0', 'Version 2.4.1.4']

print(sorted_nicely(version_list)[-1])  # "Version 2.123.1.1"
import re

def major_minor_micro(version):
    major, minor, micro = re.search('(\d+)\.(\d+)\.(\d+)', version).groups()

    return int(major), int(minor), int(micro)
versions = ['Version 2.13.1.1', 'Version 2.12.1.0', 'Version 2.10.1.4']
latest = max(versions, key=major_minor_micro)

print(latest) # 'Version 2.13.1.1'
>>> from packaging import version
>>>
>>> vers = ['Version 2.13.1.1', 'Version 2.12.1.0', 'Version 2.10.1.4']
>>>
>>> for n, i in enumerate(vers):
...     vers[n] = version.parse(i)
...
>>> max(vers)
<LegacyVersion('Version 2.13.1.1')>
>>>