1 / 1 / 0
Регистрация: 05.05.2013
Сообщений: 17

Составить из 2х заданных списков третий

29.06.2013, 18:04. Показов 1259. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны 2 списка: (1 2 3) и (2 3 4). Нужно из этих списков составить список, состоящий из всех возможных комбинаций элементов этих списков, т.е. получить:
( (1 2)(1 3)(1 4)(2 2)(2 3)(2 4)(3 2)(3 3)(3 4) )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2013, 18:04
Ответы с готовыми решениями:

Перестановка списков заданных уровней, учитывая промежуточное состояние списков
Написать программу перестановки списков заданных уровней, учитывая промежуточное состояние списков. Поиск соответствующих элементов...

Объединение 2-х списков в третий
Добрый день! Есть вопросы по работе программы. 1)Правильно ли я читаю правило? 1-й список имеет голову и хвост, 2-й список, 3-й...

Слияние упорядоченных списков в третий (найдите ошибку)
Добрый вечер , возникла сложность с решением задачи : Слияние упорядоченных списков в третий. Даны два списка L1 и L2. Считая, что...

9
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
29.06.2013, 19:30
Лучший ответ Сообщение было отмечено как решение

Решение

1) функционалы:

Lisp
1
2
3
4
5
6
7
8
(defun decart (lst1 lst2)
 (apply 'append (mapcar #'(lambda (x) (mapcar #'(lambda (y) (list x y)) lst2)) lst1)))
 
==> decart
 
(decart '(1 2 3) '(a b c d))
 
==> ((1 a) (1 b) (1 c) (1 d) (2 a) (2 b) (2 c) (2 d) (3 a) (3 b) (3 c) (3 d))
Добавлено через 2 минуты
2) циклы:

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun decart (lst1 lst2)
   (let ((res nil))
     (dolist (x lst1 res)
        (dolist (y lst2 t)
            (push (list x y) res)))))
 
==> decart
 
(decart '(1 2 3) '(a b c d))
 
==> ((3 d) (3 c) (3 b) (3 a) (2 d) (2 c) (2 b) (2 a) (1 d) (1 c) (1 b) (1 a))
2
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
29.06.2013, 19:45
Lisp
1
2
3
4
5
6
7
8
(defun cartesian-product (w v) 
  (when w (nconc (mi (car w) v) (cartesian-product (cdr w) v)))) 
 
(defun mi (a v) 
  (when v (cons (list a (car v)) (mi a (cdr v))))) 
 
> (cartesian-product '(a b c d) '(1 2 3))
((A 1) (A 2) (A 3) (B 1) (B 2) (B 3) (C 1) (C 2) (C 3) (D 1) (D 2) (D 3))
Lisp
1
2
3
4
5
6
7
8
(defun cartesian-product (w v)
  (apply
   #'nconc
   (mapcar
    #'(lambda (e) (mapcar #'(lambda (a) (list e a)) v)) w)))
 
> (cartesian-product '(a b c d) '(1 2 3))
((A 1) (A 2) (A 3) (B 1) (B 2) (B 3) (C 1) (C 2) (C 3) (D 1) (D 2) (D 3))
Lisp
1
2
3
4
5
(defun cartesian-product (w v)
  (mapcan (lambda (e) (mapcar (lambda (a) `(,a ,e)) w)) v))
 
> (cartesian-product '(a b c d) '(1 2 3))
((A 1) (B 1) (C 1) (D 1) (A 2) (B 2) (C 2) (D 2) (A 3) (B 3) (C 3) (D 3))
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
29.06.2013, 19:48
3) рекурсия:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun decart (lst1 lst2)
  (labels ((plist (x lst)
             (cond ((null lst) nil)
                   (t (cons (list x (car lst)) (plist x (cdr lst)))))))
          (cond ((null lst1) nil)
                (t (append (plist (car lst1) lst2) (decart (cdr lst1) lst2))))))
 
==> decart
 
(decart '(1 2 3) '(a b c))
 
==> ((1 a) (1 b) (1 c) (2 a) (2 b) (2 c) (3 a) (3 b) (3 c))
0
1 / 1 / 0
Регистрация: 05.05.2013
Сообщений: 17
29.06.2013, 23:45  [ТС]
Так выводит то списки с буквами, а не с цифрами... Или Вы решаете задачу в для общего случая? (мне то достаточно для этого, с самым примитивным алгоритмом)
0
14 / 9 / 2
Регистрация: 02.06.2013
Сообщений: 12
30.06.2013, 00:01
Лучший ответ Сообщение было отмечено как решение

Решение

Нет разницы что находится в списке. И если ограничить список числами, это задачу не упростит.
Вот ещё на Racket вариант
Lisp
1
2
3
(define (decart list-1 list-2)
  (for*/list ([x list-1] [y list-2])
    (list x y)))
2
1 / 1 / 0
Регистрация: 05.05.2013
Сообщений: 17
02.07.2013, 00:15  [ТС]
Catstail, а нельзя решить эту задачу по простому? Я имею ввиду, только для данного случая и, например, с "car" и "cdr" ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
02.07.2013, 08:31
Цитата Сообщение от Товарищ Тяфка Посмотреть сообщение
по простому
- пишется "по-простому"
Цитата Сообщение от Товарищ Тяфка Посмотреть сообщение
только для данного случая
- для какого данного? Для числовых списков?
Цитата Сообщение от Товарищ Тяфка Посмотреть сообщение
и, например, с "car" и "cdr"
- так эти функции фигурируют почти во всех решениях... А только с car и cdr (без использования других) не получится. Для решения задачи нужен перебор списков, а это - либо циклы (do или dolist), либо рекурсия (cond или if). А для конструирования результата нужен cons (или append).

Впрочем, для списков фиксированной длины (напр. 2) можно предложить частное решение ("по-простому"):

Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun f (x y)
  (cons (cons (car x) (cons (car y) nil))  
        (cons (cons (car x) (cons (cadr y) nil)) 
              (cons (cons (cadr x) (cons (car y) nil)) 
                    (cons (cons (cadr x) (cons (cadr y) nil)) nil))))) 
 
==> f
 
(f '(1 2) '(3 4))
 
==> ((1 3) (1 4) (2 3) (2 4))
Это "простое" решение не будет работать для списков, c длиной, отличной от 2.

Добавлено через 5 минут
Несколько проще "решение" с list:

Lisp
1
2
3
4
5
6
7
8
9
(defun f (x y)
  (list (list (car x) (car y)) (list (car x) (cadr y))            
        (list (cadr x) (car y)) (list (cadr x) (cadr y))))
 
==> f
 
(f '(1 2) '(3 4))
 
==> ((1 3) (1 4) (2 3) (2 4))
0
 Аватар для _sg
4710 / 4405 / 380
Регистрация: 12.05.2012
Сообщений: 3,102
02.07.2013, 08:52
Lisp
1
2
3
4
5
6
7
8
9
10
11
(defun cartesian-product (w v) 
  (cond ((null w) nil)
        (t (append (mi (car w) v)
                   (cartesian-product (cdr w) v)))))
 
(defun mi (a w) 
  (cond ((null w) nil)
        (t (cons (list a (car w)) (mi a (cdr w))))))
 
> (cartesian-product '(1 2 3) '(2 3 4))
((1 2) (1 3) (1 4) (2 2) (2 3) (2 4) (3 2) (3 3) (3 4))
2
1 / 1 / 0
Регистрация: 05.05.2013
Сообщений: 17
02.07.2013, 11:09  [ТС]
_sg, спасибо, это то, что нужно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2013, 11:09
Помогаю со студенческими работами здесь

Выполнить пересечение двух упорядоченных по возрастанию списков в третий
Необходимо сделать программу для Visual Prolog, которая выполняет пересечение двух упорядоченных по возрастанию списков - L1 и L2 в третий,...

Создать два списка и все нечетные элементы списков переместить в третий список
как создать 2 однонаправлених списка и все непарные елементи обоих списков переместить в 3? буду очень благодарен за любую помощь

Из двух списков чисел извлечь общие числа, большие данного и поместить их в третий список
Из двух списков чисел извлечь общие числа, большие данного и поместить их в третий список Помогите решить до завтра.

Образовать третий массив из двух заданных по правилу
Даны два массива .Образовать третий массив в котором сначала будут расположены все положительные(+) элементы первого массива затем...

Сформировать третий массив на основе двух заданных
Составьте блок-схемы алгоритмы и написать программу на Qbasic. Даны два массив:/1(5) и B{5). Сформируйте массив С, предварительно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru