Прошло какое-то время, и у меня возникли проблемы с нахождением алгоритма, который я пытаюсь сделать. По сути, у меня есть два списка, и я хочу получить все комбинации из двух списков.
Я не могу объяснить это правильно, так что вот пример.
name = 'a', 'b'
number = 1, 2
выход в этом случае будет:
1. A1 B2
2. B1 A2
Сложность в том, что у меня может быть больше элементов в переменной «name», чем элементов в переменной «number» (число всегда будет равно или меньше переменной name).
Я запутался, как делать все комбинации (вложенные для цикла?), И еще больше запутался в логике, чтобы сместить элементы в переменной name в случае, если в имени больше элементов, чем в списке номеров.
Я не лучший программист, но думаю, что смогу дать ему шанс, если кто-нибудь поможет мне прояснить логику / алгоритм для достижения этой цели. Так что я только что застрял на вложенных для петель.
Обновить:
Вот результат с 3 переменными и 2 числами:
name = 'a', 'b', 'c'
number = 1, 2
вывод:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
источник
Ответы:
Примечание . Этот ответ предназначен для конкретного вопроса, заданного выше. Если вы находитесь здесь от Google и просто ищете способ получить декартово произведение на Python,
itertools.product
или вам может понадобиться простое понимание списка - посмотрите другие ответы.Пусть
len(list1) >= len(list2)
. Тогда то , что вы , кажется, хотят, чтобы принять все перестановки длиныlen(list2)
отlist1
и сопоставить их с элементами из list2. В питоне:Возвращает
источник
zip
и похожий.Самый простой способ - использовать
itertools.product
:источник
Может быть проще, чем простой выше:
без какого-либо импорта
источник
Я искал список, умноженный на себя только с уникальными комбинациями, который предоставляется как эта функция.
Вот отрывок из документации по Python,
itertools
который поможет вам найти то, что вы ищете.источник
Возможно, вы захотите попробовать понимание списка в одну строку:
источник
Лучший способ узнать все комбинации для большого количества списков:
результат будет:
источник
Или ответ KISS для коротких списков:
Не так быстро, как itertools, но вы используете Python, так что производительность уже не ваша главная задача ...
Мне также нравятся все остальные ответы!
источник
крошечное улучшение для ответа от interjay, чтобы сделать результат в виде сплющенного списка.
ссылка по этой ссылке
источник
Без itertools
источник
Отвечая на вопрос «дано два списка, найдите все возможные перестановки пар по одному элементу из каждого списка» и используя базовые функциональные возможности Python (т.е. без itertools) и, следовательно, упростите репликацию для других языков программирования:
Возвращает
источник
Лучшие ответы на это работают только для определенных длин списков, которые предоставляются.
Вот версия, которая работает для любой длины ввода. Это также делает алгоритм понятным с точки зрения математических концепций комбинации и перестановки.
Это выводит:
источник