输入命令后,我得到数据,然后我将其转换为列表。转换为列表后,如何从该列表 [A] 复制所有数据并将其保存 - 因此,当我输入命令并获得第二个数据列表 [B] 时,我可以比较两者;并让两个列表中相同的数据抵消 - 因此输出 [A] 和 [B] 之间不相似的数据。例如...
List [A]
1
2
3
List [B]
1
2
3
4
使用 Python,我现在想将两个列表相互比较,然后输出差异。
Output = 4
希望这是有道理的!
您可以使用集合操作。
a = [1,2,3]
b = [1,2,3,4]
print set(b) - set(a)
要以列表格式输出数据,您可以使用以下打印语句
print list(set(b) - set(a))
>>> b=[1,2,3,4]
>>> a=[1,2,3]
>>> [x for x in b if x not in a]
[4]
for element in b:
if element in a:
a.remove(element)
这个答案将返回一个列表而不是一个集合,并且应该考虑到重复。这样 [1,2,1] - [1,2] 返回 [1] 而不是 []。
尝试itertools.izip_longest
import itertools
a = [1,2,3]
b = [1,2,3,4]
[y for x, y in itertools.izip_longest(a, b) if x != y]
# [4]
您可以轻松地对其进行进一步修改,以针对每个差异返回一个重复项,其中重复项中的第一项是位置,b
第二项是值。
[(i, pair[1]) for i, pair in enumerate(itertools.izip_longest(a, b)) if pair[0] != pair[1]]
# [(3, 4)]
要输入数据,请使用循环:
def enterList():
result = []
while True:
value = raw_input()
if value:
result.append(value)
else:
return result
A = enterList()
B = enterList()
为了进行比较,您可以使用zip
构建对并比较它们中的每一个:
for a, b in zip(A, B):
if a != b:
print a, "!=", b
这将在较短列表的长度处截断比较;使用此处给出的另一个答案中的解决方案itertools.izip_longest()
来处理该问题。