2

输入命令后,我得到数据,然后我将其转换为列表。转换为列表后,如何从该列表 [A] 复制所有数据并将其保存 - 因此,当我输入命令并获得第二个数据列表 [B] 时,我可以比较两者;并让两个列表中相同的数据抵消 - 因此输出 [A] 和 [B] 之间不相似的数据。例如...

List [A]
1
2
3

List [B]
1
2
3
4

使用 Python,我现在想将两个列表相互比较,然后输出差异。

Output = 4

希望这是有道理的!

4

5 回答 5

3

您可以使用集合操作。

a = [1,2,3]
b = [1,2,3,4]

print set(b) - set(a)

要以列表格式输出数据,您可以使用以下打印语句

print list(set(b) - set(a))
于 2013-07-03T14:29:26.453 回答
1
>>> b=[1,2,3,4]
>>> a=[1,2,3]
>>> [x for x in b if x not in a]
[4]
于 2013-07-03T14:43:08.420 回答
0
for element in b:
    if element in a:
        a.remove(element)

这个答案将返回一个列表而不是一个集合,并且应该考虑到重复。这样 [1,2,1] - [1,2] 返回 [1] 而不是 []。

于 2013-07-03T14:37:06.423 回答
0

尝试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)]
于 2013-07-03T14:37:54.583 回答
0

要输入数据,请使用循环:

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()来处理该问题。

于 2013-07-03T14:44:32.360 回答