我有兩個非常大的軟件包列表及其版本,我試圖比較它們以確定是否有更高版本的軟件包。我的數據的一個例子:在兩個大名單和版本列表中檢查版本更新
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'相對較小... –