Как объединить двухмерный и трехмерный список? - PullRequest
0 голосов
/ 06 октября 2019

У меня проблемы с поиском кода для записи, который объединит двухмерный список в трехмерный список. Например, «a» - это двумерный список, а «b» - это трехмерный список, в котором я хотел бы объединить их вместе и отсортировать по порядку. Если это возможно, можно ли это сделать с помощью понимания списка? Для другого примера вот мой список ниже.

a = [[7, 28],[28],[28]]
b = [[[3, 9],[3, 9],[3, 9]],[[3, 4],[4, 7],[4, 7]],[[7, 11],[3, 11],[3, 7, 12]]]

Я бы хотел, чтобы мой результат был

c = [[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],
     [[3, 4, 28],[4, 7, 28],[4, 7,28]],
     [[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]]

Ответы [ 4 ]

2 голосов
/ 06 октября 2019

На случай, если вам понравился oneliner:

result = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print (result)

#[[[3, 9, 7, 28], [3, 9, 7, 28], [3, 9, 7, 28]], [[3, 4, 28], [4, 7, 28], [4, 7, 28]], [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]
1 голос
/ 06 октября 2019

Это должно работать:

c = [[sorted(i+x) for i in y] for x, y in zip(a,b)]

print(c)
#[[[3, 7, 9, 28],[3, 7, 9, 28],[3, 7, 9, 28]],[[3, 4, 28],[4, 7, 28],[4, 7,28]],[[7, 11, 28],[3, 11, 28],[3, 7, 12, 28]]
1 голос
/ 06 октября 2019

другой 1-лайнер, используя enumerate вместо zip:

c = [[sorted(s1+a[i]) for s1 in s0] for i, s0 in enumerate(b)]
1 голос
/ 06 октября 2019

Попробуйте это:

c = [[sorted(i+k) for k in j] for i,j in zip(a,b)]

Вывод :

[[[3, 7, 9, 28], [3, 7, 9, 28], [3, 7, 9, 28]], 
 [[3, 4, 28], [4, 7, 28], [4, 7, 28]], 
 [[7, 11, 28], [3, 11, 28], [3, 7, 12, 28]]]

Вот еще один способ без однострочного:

c = b[:]
for i,j in zip(a,c):
    for k in j:
        k.extend(i)
        k.sort()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...