使用列表列表并进行一些比较Python

时间:2018-08-30 19:45:27

标签: python

我不知道如何比较2个不同的列表并写出我需要的内容: 我有一个清单清单。我需要检查3件事。 首先,如果item[1], item[2] este_mes中的item在列表resto中,然后将完整的item添加到changes中。 其次,如果item[1], item[2] este_mes的{​​{1}}不在item中,则添加到resto并添加news的{​​{1}} { {1}}不是the item[1], item[2],请添加到resto

item

答案应该是:

este_mes

这是答案:

lost

3 个答案:

答案 0 :(得分:1)

我已经注释了代码,希望您能遵循逻辑。

#initialise our lists
news = []
changes = []
lost = []
#iterate over each list in `este_mes`
for l in este_mes:
    #matches marks whether we have matched in `resto`
    matched = False
    for ll in resto:
        if l[1] == ll[1] and l[2] == ll[2]:
            #we matched, so append list from `resto` to changes
            changes.append(ll)
            matched = True
    #if there were no matches, append the `este_mes` list to `news`
    if not matched:
        news.append(l)

#iterate over lists in `resto` to look for ones to add to `lost`
for l in resto:
    #check to see if there are any matches in `este_mes`
    for ll in este_mes:
         if l[1] == ll[1] and l[2] == ll[2]:
             break
    else:
         #this `else` clause is run if there was no `break` -
         #indicates that no matches were found so add to `lost`.
         lost.append(l)

输出正确的列表:

>>> news
[['1', 'C', 'c', '100'], ['1', 'D', 'd', '4500']]
>>> lost
[['2', 'X', 'x', '98'], ['2', 'Z', 'z', '276'], ['3', 'F', 'f', '76'], ['3', 'Y', 'y', '99']]
>>> changes
[['2', 'A', 'a', '3'], ['3', 'A', 'a', '54'], ['2', 'B', 'b', '302'], ['3', 'B', 'b', '65']]

答案 1 :(得分:0)

使用any运算符查看列表中是否存在特定条件的任何事件。在这种情况下,我会为每个新列表比较两个字母的序列。

对于每一个,请确保从正确的列表(este_mes或resto)中抓取该项目。该列表必须是列表理解+可迭代组合中的外部for。这就是为什么其中第一个在外部具有este,而其他两个在外部具有rest的原因。

news = [este for este in este_mes 
           if not any((rest[1], rest[2]) == (este[1], este[2]) 
               for rest in resto)]

changes = [rest for rest in resto
              if any((rest[1], rest[2]) == (este[1], este[2])
                   for este in este_mes)]

lost = [rest for rest in resto
           if not any((rest[1], rest[2]) == (este[1], este[2])
                for este in este_mes)]

print(news)
print(lost)
print(changes)

输出:

[['1', 'C', 'c', '100'], ['1', 'D', 'd', '4500']]
[['2', 'A', 'a', '3'], ['2', 'B', 'b', '302'], ['3', 'A', 'a', '54'], ['3', 'B', 'b', '65']]
[['2', 'X', 'x', '98'], ['2', 'Z', 'z', '276'], ['3', 'F', 'f', '76'], ['3', 'Y', 'y', '99']]

答案 2 :(得分:-1)

据我所知,您的实际问题仅仅是“我如何检查last项中是否有东西?”

这是一个不错的方法:

resto

然后您可以执行def in_item(items, value): return any(value in item for item in items) # For example in_item([[1, 3], [5]], 1) Out: True in_item([[1, 3], [5]], 2) Out: False ,依此类推。