找到两个列表之间的差异并创建一个零列表

时间:2017-10-20 16:57:53

标签: python

我正在尝试创建一个函数,它接受两个列表比较它们并返回一个列表,显示第一个列表与另一个列表的不同之处。以下是一些示例:

  • 示例1:

    list1: [1, 2, 3]
    list2: [1, 3]
    desired result: [0, 1, 0]     
    
  • 示例2

    list1: [1, 3, 1, 2, 4]
    list2: [1, 1, 4]
    desired result: [0, 1, 0, 1, 0]
    
  • 示例3

    list1: [3, 5, 2, 9, 9]
    list2: [3, 5, 9, 9]
    desired result: [0, 0, 1, 0, 0]
    
  • 示例4

    list1: [1, 1, 1]
    list2: [1]
    desired result: [0, 1, 1]
    
  • 示例5

    list1: [1, 2, 2, 1]
    list2: [1, 2, 1]
    desired result: [0, 0, 1, 0]
    

一些事实:

  • list1的长度始终大于或等于list2
  • desired list的长度为list1
  • 所需列表中的数量与两个列表的长度差异相等。

我道歉,我没有提供任何答案,但我想不出任何方法来实现这一点。任何指导/提示?

3 个答案:

答案 0 :(得分:1)

这是我的尝试:

def compute_difference(list1, list2):
    result = []
    iter1 = iter(list1)
    for item2 in list2:
        for item1 in iter1:
            if item2 == item1:
                result.append(0)
                break
            else:
                result.append(1)
    for item1 in iter1:
        result.append(1)

    return result

assert compute_difference([1,2,3],[1,3]) == [0, 1, 0]
assert compute_difference([1, 3, 1, 2, 4], [1, 1, 4]) == [0, 1, 0, 1, 0]
assert compute_difference([3, 5, 2, 9, 9], [3, 5, 9, 9]) == [0, 0, 1, 0, 0]

答案 1 :(得分:1)

我认为这适合你:

desired = []
list1= [1, 3, 1, 2, 4]
list2= [1, 1, 4]
j = 0;
for i in range(len(list2)):
    while(list1[j] != list2[i]):
        desired.append(1)
        j+=1
    desired.append(0)
    j += 1

print (desired)

答案 2 :(得分:0)

不像其他人那样优雅,但这会起作用。基本上你只需检查列表之间的成员资格。如果它在那里然后追加0,否则将1添加到新列表。

list1 = [3, 5, 2, 9, 9]
list2 = [3, 5, 9, 9]
# desired result: [0, 0, 1, 0, 0]

result = []
for i in range(0, len(list1)):
    # print(list1[i])
    if list1[i] in list2:
        result.append(0)
    else:
        result.append(1)
print(result)

我希望这会有所帮助。