我不知道如何比较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
答案 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
,依此类推。