Вызов:
Получив список непустых списков целых чисел, верните список кортежей следующего вида: кортежи первого списка, начинающиеся с каждого элемента первого списка, за которым следует первый элемент каждого последующего списка, так что i-й кортеж должен быть [ith element of first list, first element of second list, ... , first element of last list]. Например:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => [[1, 4, 7], [2, 4, 7], [3, 4, 7], ...
Затем выполните кортежи формы [last element of first list, ith element of second list, first element of third list, ..., first element of last list], поэтому в нашем примере это будет:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 4, 7], [3, 5, 7], [3, 6, 7], ...
Продолжайте с каждым оставшимся списком, пока не доберетесь до [last element of first list, ..., last element of second to last list, ith element of last list]:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] => ..., [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Полный вывод выглядит следующим образом:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] =>
[[1, 4, 7], [2, 4, 7], [3, 4, 7], [3, 5, 7], [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Несколько шаблонов для хорошей меры:
- Если вы хотите, чтобы входные данные были списками строк или списками натуральных чисел, это нормально. Речь идет о манипулировании списками, а не о том, что в списках.
- Ввод и вывод могут быть в любом приемлемом формате .
- Допускается либо полная программа, либо функция.
- Стандартные лазейки по умолчанию запрещены.
- Этот вопрос относится к коду гольфа, поэтому побеждает меньшее количество байт.
Примеры:
[] => [[]] (or an error, thanks to ngn for correcting the output in this case)
[[1]] => [[1]]
[[1, 2], [3, 4], [5]] => [[1, 3, 5], [2, 3, 5], [2, 4, 5]]
[[1], [2], [5, 6], [3], [4]] => [[1, 2, 5, 3, 4], [1, 2, 6, 3, 4]]
[[1, 2, 3], [4, 5]] => [[1, 4], [2, 4], [3, 4], [3, 5]]
[[1, 2, 3], []] => unspecified behavior (can be an error)
[[3, 13, 6], [9, 2, 4], [5, 10, 8], [12, 1, 11], [7, 14]] =>
[[3, 9, 5, 12, 7], [13, 9, 5, 12, 7], [6, 9, 5, 12, 7], [6, 2, 5, 12, 7],
[6, 4, 5, 12, 7], [6, 4, 10, 12, 7], [6, 4, 8, 12, 7], [6, 4, 8, 1, 7],
[6, 4, 8, 11, 7], [6, 4, 8, 11, 14]]
[[16, 8, 4, 14, 6, 7, 10, 15], [11, 1, 12, 2, 19, 18, 9, 3], [13, 5, 17]] =>
[[16, 11, 13], [8, 11, 13], [4, 11, 13], [14, 11, 13], [6, 11, 13],
[7, 11, 13], [10, 11, 13], [15, 11, 13], [15, 1, 13], [15, 12, 13], [15, 2, 13],
[15, 19, 13], [15, 18, 13], [15, 9, 13], [15, 3, 13], [15, 3, 5], [15, 3, 17]]
Если у кого-то есть лучшее название, дайте мне знать.
[[]]потому, что существует один пустой кортеж с одной записью из каждого (нулевого) подсписка. Возможно, это слишком раздражает, чтобы программы правильно выводили это, поэтому я скажу, что в этом нет необходимости.
[]Строго говоря, Да - это пустой список непустых списков, но выходные данные неоднозначны между []и [[]]если это разрешенный ввод. («Кортежи первого списка, начинающиеся с каждого элемента первого списка ...» - первого списка нет, так что мы закончили -> [])
[]должен быть [[]]. Например, количество выходных кортежей - это то, sum(inner list lengths) - length of outer list + 1что в пустом случае дает 1длина, [[]]а не длина []. Это немного педантичный вопрос, хотя ...
[] => []действительно должно быть,[] => [[]]но я не могу найти слов, чтобы объяснить, почему.