Понимание с операторами цепочки for

Итак, я должен взять массив x и массив y и создать новый массив пар так, чтобы элементы не были равны. Вот мой код:

x=[1,2,3,4]
y=[2,4,6]
my_list=[]
for a in x:
    for b in y:
        if a!=b:
            list=[a,b]
            my_list.append(list)
#my_list+=[(a,b) for (a,b) in (x,y) if (a!=b)]
print (my_list)

Таким образом, результат: [[1, 2], [1, 4], [1, 6], [2, 4], [2, 6], [3, 2], [3, 4], [3, 6], [4, 2], [4, 6]]

Ничего не импортируя, как мне свернуть это с пониманием списка и цепочкой для операторов. Моя скудная попытка находится в разделе #comment.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вот как вы можете сделать это, используя понимание списка:

x=[1,2,3,4]
y=[2,4,6]

[[a,b] for a in x for b in y if a!=b]

Вывод

[[1, 2], [1, 4], [1, 6], [2, 4], [2, 6], [3, 2], [3, 4], [3, 6], [4, 2], [4, 6]]

Спасибо! Я был так близок во всех своих попытках, но это самое простое. Я бы хотел, чтобы Python упростил синтаксис понимания списка.

user5179531 27.02.2019 15:44

@user5179531 user5179531 не забудьте принять ответ, если он помог, спасибо! :-)

yatu 27.02.2019 17:29

Вы также можете избежать создания переменных x и y, написав следующий код

[[i, j] for i in [1, 2, 3, 4] for j in [2, 4, 6] if i != j]

Лучше иметь переменные для списков, если они довольно большие. Вы не получаете дополнительные баллы за использование меньшего количества переменных ;)

Óscar López 27.02.2019 15:45

@ ÓscarLópez Я не могу понять твой комментарий. Вы говорите, что лучше иметь два цикла for, чем сокращение Python, или вы говорите об именах переменных «i», «j»? Я думаю, что сокращения Python — это очень питонический способ перебора массивов, и он очень популярен для всего сообщества Python.

Nico 27.02.2019 16:04

@ ÓscarLópez Я согласен, но это всего лишь еще один способ сделать это.

Tatevik 27.02.2019 16:09

Вопрос, над которым я работал, требовал, чтобы они были переменными, чтобы их можно было изменять по желанию. Явное написание их в коде "закрепляет" их. Вот почему я использовал x и y.

user5179531 27.02.2019 16:12

@ Нико, я совсем не об этом. Я даже не говорю о пониманиях (не сокращениях, как вы говорите). Я говорю только об именах переменных.

Óscar López 27.02.2019 16:18

Это также место, где вы можете использовать itertools для построения вывода. Получает тот же результат, что и понимание списка, но с немного меньшим количеством кода.

import itertools

x=[1,2,3,4]
y=[2,4,6]

list(itertools.product(x, y))

Другие вопросы по теме