我有两个非常大的软件包列表及其版本,我试图比较它们以确定是否有更高版本的软件包。我的数据的一个例子:在两个大名单和版本列表中检查版本更新
listOne = ['autoconf-2.69-4', 'b43-fwcutter-019-1', 'binutils-2.28.0-3']
listTwo = ['autoconf-2.69-4', 'automake-1.16-1', 'binutils-2.29.0-1']
现在我需要找到一个比一个那么listOne高版本的软件包。在上面的例子中,只有binutils符合条件。
这些列表是有序的,但每个列表具有独特的相同版本的只有自己,共享套餐,以及同名的包,但只有一个不同版本的软件包。那些是我正在寻找的。最终列表的顺序是必需的,并且软件包必须保持其当前的命名方案。
我当前的代码要做到这一点,如下所示:
listOne = ['autoconf-2.69-4', 'b43-fwcutter-019-1', 'binutils-2.28.0-3']
listTwo = ['autoconf-2.69-4', 'automake-1.16-1', 'binutils-2.29.0-1']
uniqPackages = sorted(list(set(listTwoPackages) - set(listOnePackages)))
for package in uniqPackages:
for packageFull in listOne:
if packageFull.rsplit("-", 2)[0] == package.rsplit("-", 2)[0]:
versionValue = compareVersions(packageFull.rsplit("-", 2)[1] + "-" + packageFull.rsplit("-", 2)[2], \
package.rsplit("-", 2)[1] + "-" + package.rsplit("-", 2)[2])
if versionValue:
print(package.rsplit("-", 2)[0] + "-" + package.rsplit("-", 2)[1] + "-" + package.rsplit("-", 2)[2])
功能compareVersions
是一个自定义函数,将返回True如果第二个版本比第一个值更新。有一些版本较低,我不想要。
这段代码有点笨拙,而且相当慢,因为我的列表非常庞大。无论如何,我可以加快这个比较过程吗?
在此先感谢。
我真的很喜欢这种方法,但我的原因毫不知情,这其实需要两倍多的时间。在我目前的代码下,它需要0m46.053s,在你的代码下需要2m0.250s ...然而,排序的想法比我的嵌套循环更吸引人。 –
我找不到任何可能会变慢的原因...这可能是因为'compareVersions'不同? LooseVersion处理了很多情况,所以不是最简单的一个实例化和比较......或者它可能是因为'uniquePackages'相对较小... –