Я изучаю Python и хотел бы понять, что здесь происходит. Я уверен, что мне не хватает чего-то простого. Я получаю элементы из двух списков, которые не отображаются в обоих. Вот мой код с выводом:
l = [1, 8, 3, 4]
m = [4, 6, 3, 8]
Method 1:
r = list(set(l) - set(m)) + list(set(m) - set(l))
[1, 6]
Method 2:
print [(x,y) for x in l for y in m if x not in m and y not in l]
[(1, 6)]
Method 3 (same but returns a list):
print [[x,y] for x in l for y in m if x not in m and y not in l]
[[1, 6]]
Мне бы хотелось, чтобы в списке было то же самое, что возвращено методом 1.
Кроме того, насколько я понимаю, я получаю генератор в результате кода в понимании списка. Однако я не могу превратить его в простой список:
res = ((x,y) for x in l for y in m if x not in m and y not in l)
print list(res)
[(1, 6)]
Почему это? Я ожидаю:
[1, 6]
РЕДАКТИРОВАТЬ: мой главный вопрос: почему я не могу превратить генератор из моего понимания списка выше в список? Согласно принятому ответу в этот вопрос с использованием list(res)
должен работать. Я хочу понять, почему это не так.