【发布时间】:2020-10-09 13:47:08
【问题描述】:
我有两个嵌套列表。这两个列表非常相似,它们是同一文件的不同版本,彼此叠加。
列表结构类似于list = [[name, version, id],[name, version, id], ...]
list_1 = [
['mipl-abnd','v1.0.2','eelp234'],
['mipl-avfd','v1.1.5','32fv423'],
['mipl-awsd','v9.0.2','234eelp'],
['mipl-tgfd','v3.0.0','124fdge'],
['mipl-hrdss','v1.0.2','543rfd3'],
['mipl-oldss','v1.0.2','eelp234']]
list_2 = [
['mipl-abnd','v1.0.2','eelp234'],
['mipl-avfd','v1.1.6','3254323'],
['mipl-awsd','v9.0.2','234eelp'],
['mipl-tgfd','v3.0.0','124fdge'],
['mipl-hrdss','v1.0.2','543rfd3'],
['mipl-newss','v1.0.2','eelp234']]
我想迭代并比较list_1 中的名称是否存在于list_2 中,如果存在,则list_1 中该组件的版本是否不等于list_2 中该组件的版本(如果有库的版本升级),则为所有独特情况打印newlist_1 = [name, old version, new version, old id, new id]。
如果list_1 中存在名称,而list_2 中不存在该名称,则表示不推荐使用库,在这种情况下,新的输出列表应包含newlist_2 = [name, old version, 'deprecated', old id, 'deprecated']。
如果list_2中有名称,而list_1中不存在,则意味着新添加了一个库,在这种情况下,新的输出列表应该包含newlist_3 = [name, 'new', new version, new, new id]。
最终输出应该是 3 个列表,应该得到:
newlist_1 = ['mipl-avfd', 'v1.1.5', 'v1.1.6','32fv423', '3254323']
newlist_2 = ['mipl-oldss','v1.0.2', 'deprecated','eelp234', 'deprecated']
newlist_3 = ['mipl-newss', 'new','v1.0.2','new', 'eelp234']
我试着写这样的东西:
for items in list_1:
for item in list_2:
if item[0] == items[0] and item[1] != items[1]:
list_difference = [item[0], items[1], item[1], items[2], items[2]]
newlist_1.append(list_difference)
elif item[0] not in items[0]:
list_old_param = [item[0], item[1], 'deprecated', items[2], 'not-exist']
newlist_2.append(list_old_param)
elif items[0] not in item[0]:
list_new_param = [item[0], 'new' , items[1], 'new', items[2]]
newlist_3.append(list_new_param)
由于两个for 循环,所有数据似乎都附加并创建了多个条目,那么我如何理解列表?
问题:如何使其仅附加唯一条目?有哪些聪明的方法可以编写代码来比较这两个列表?最简单的方法是什么?由于列表会不断变化,如何确保循环不会过度拟合这些列表?
【问题讨论】:
标签: python nested-loops nested-lists