2013-07-03 3 views
2

После ввода команды мне присваиваются данные, которые затем преобразуются в список. После преобразования в список, как мне скопировать ВСЕ данные из этого списка [A] и сохранить его - поэтому, когда я вхожу в команду и мне предоставляется второй список данных [B], я могу сравнить эти два; и данные, которые являются одинаковыми из двух списков, отменены - так что не получается между [A] & [B]. Например ...Как скопировать данные в Python

List [A] 
1 
2 
3 

List [B] 
1 
2 
3 
4 

Использование Python, теперь я хочу сравнить два списка друг с другом, а затем вывести различия.

Output = 4 

Надеюсь, это имеет смысл!

+0

Итак, вы хотите ввести два списка и показать различия между этими двумя файлами? –

+0

@karthikr спасибо за очистку, что до –

+1

. Где соединение с копированием, как указано в заголовке? – Alfe

ответ

3

Вы можете использовать операции набора.

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

print set(b) - set(a) 

для вывода данных в формате списка вы можете использовать следующий оператор печати

print list(set(b) - set(a)) 
+3

Я не думаю, что это совершенно правильно. Он никогда не говорил, что дубликатов нет. Например, [1,1,2] - [1,2] будет пустым множеством вместо списка, содержащего [1]. – BenjaminCohen

+0

* она, и^Правда, но я не думаю, что столкнусь с этой проблемой с данными, которые у меня есть. Как я могу вывести этот набор только с различиями? Без него говорят >> set (['sd4', 'sd99']) – ohhiloveyouu

+0

@johnthexiii Спасибо! Это работает отлично! – ohhiloveyouu

0
for element in b: 
    if element in a: 
     a.remove(element) 

Этот ответ возвращает список не набор, и следует принимать во внимание дубликаты. Таким образом [1,2,1] - [1,2] возвращает [1] не [].

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)] 
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() для его обработки.

Смежные вопросы