2016-12-04 3 views
-4

Напишите функцию или программу, которая будет принимать 2 массива целых чисел, «текущий» и «целевой», и создать 2 массива, представляющих список дополнений и список исключений, так что применение добавлений и исключений к «текущему «массив будет выдавать массив« target ».Python Array Diff

Например, учитывая следующие входы:

current = [1, 3, 5, 6, 8, 9] 

target = [1, 2, 5, 7, 9] 

Выходы будут:

additions: [2, 7] 

deletions: [3, 6, 8] 

Так что справедливо следующее:

тока ([1, 3, 5, 6, 8, 9]) + дополнения ([2, 7]) - делеции ([3, 6, 8]) = мишень ([1, 2, 5, 7, 9])

Решение:

До сих пор у меня есть это:

--------------------------- 

# import array function 
from array import array 

# create an integer array named current 
current = array('i', [1, 3, 5, 6, 8, 9]) 

# add items from additions list into current array using the fromlist() method 
additions = [2, 7] 
current.fromlist(additions) 

# remove items on deletions list from current array using the.  remove() method 
current.remove(3) 
current.remove(6) 
current.remove(8) 

+1

В чем проблема? – Dekel

+0

Можете ли вы уточнить, что «не работает»? Вы получаете какую-то ошибку? – Dekel

+0

Извинения- это более или менее работает, но thry вышли из строя в финальном списке, как только я пройду через –

ответ

0

Это будет работать для вас ...

def addlist(current,target): 
     add = [] 
     intersection = set(current) & set(target) 
     for i in target: 
       if i not in intersection: 
         add.append(i) 
     return add 

def removeList(current,target): 
     remove = [] 
     intersection = set(current) & set(target) 
     for i in current: 
       if i not in intersection: 
         remove.append(i) 
     return remove 

def main(): 
     current = [1, 3, 5, 6, 8, 9] 
     target = [1, 2, 5, 7, 9] 
     print(addlist(current,target)) 
     print(removeList(current,target)) 

if __name__=="__main__": 
     main() 
0

Ниже следует легко понять.

>>> current = [1, 3, 5, 6, 8, 9] 
>>> target = [1, 2, 5, 7, 9] 
>>> set(current) & set(target) 
set([1, 5, 9]) 
>>> unique = list(set(current) & set(target)) 
>>> additions = [i for i in target if i not in unique] 
>>> additions 
[2, 7] 
>>> deletions = [i for i in current if i not in unique] 
>>> deletions 
[3, 6, 8] 
>>> 
0

Это будет работать, как хорошо.

current = [1, 3, 5, 6, 8, 9] 
target = [1, 2, 5, 7, 9] 
additions=[x for x in target if x not in current] 
deletions=[x for x in current if x not in target]