списки пар для создания кортежей по порядку - PullRequest
28 голосов
/ 20 марта 2011

Я хотел бы объединить два списка. Если у меня есть два следующих списка: {a,b,c,d} и {1,2,3,4}, что мне нужно сделать, чтобы я получил {{a,1}, {b,2}, {c,3}, {d,4}}?

Ответы [ 7 ]

36 голосов
/ 20 марта 2011

Вот один из способов:

Transpose[{{a, b, c, d}, {1, 2, 3, 4}}]
17 голосов
/ 21 марта 2011

Эзотерический метод - Flatten, который (из раздела справки по Flatten) также позволяет транспонировать «рваный» массив.

Flatten[ {{a, b, c, d}, {1, 2, 3, 4, 5}}, {{2}, {1}}]

Out [6] = {{a, 1}, {b, 2}, {c, 3}, {d, 4}, {5}}

11 голосов
/ 20 марта 2011

Одним из возможных решений является

MapThread[List,{{a,b,c,d},{1,2,3,4}}]
2 голосов
/ 21 марта 2011

Если у вас есть списки со столбцами матрицы:

l = Table[Subscript[g, Sequence[j, i]], {i, 5}, {j, 5}]

Транспонирование даст вам строки:

Transpose@l // MatrixForm
1 голос
/ 31 мая 2016

Если сами a, b, c, d также перечислены, используйте следующее:

MapThread[Flatten[{#1[[All]],#2}]&,{l1,l2}]//TableForm

1 голос
/ 11 июня 2014
listA={a,b,c,d};
listB=[1,2,3,4};
table=Transpose@{# & @@@ listA, # & @@@ listB}
0 голосов
/ 02 ноября 2015

Это отличный вопрос.Я застрял, думая, что есть стандартный способ сделать это с помощью Table, но это не так.Ответы ниже довольно интуитивны и могут быть легко обобщены для других подобных ситуаций.

l1 = {a,b,c,d};
l2 = {1,2,3,4};
pairs = Table[{l1[[i]], l2[[i]]}, {i, 1, Length[l1]}]

MapThread также выполняет такие функции.Это менее изящно, чем решение MapThread от Howard, но в некотором смысле более читабельно.Посмотрите документы MapThread.Функция определяется inline (чистая функция):

pairs = MapThread[{#1, #2} &, {l1, l2}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...