Предположим, у меня есть 3 двухмерных списка python (data_1, data_2, data_3) размером 10x5. Я хочу сделать один список (all_data) из них с размерами 30x5. Сейчас я делаю это, применяя следующее:

data_1 = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], ..., [46, 47, 48, 49, 50]]
data_2 = [[101, 102, 103, 104, 105], [106, 107, 108, 109, 110], ..., [146, 147, 148, 149, 150]]
data_3 = [[201, 202, 203, 204, 205], [206, 207, 208, 209, 210], ..., [246, 247, 248, 249, 250]]
all_data = []
for index, item in enumerate(data_1):
    all_data.append(item)

for index, item in enumerate(data_2):
    all_data.append(item)

for index, item in enumerate(data_3):
    all_data.append(item)

Если я просто сделаю что-то вроде этого:

all_data.append(data_1)
all_data.append(data_2)
all_data.append(data_3)

Тогда я получаю список 3х10х5, что не то, что я хочу.

Так можно ли создать список 30x5, добавив три списка 10x5 без использования цикла for?

1
Outcast 26 Фев 2018 в 15:29

5 ответов

Лучший ответ

Вы можете просто extend свой список.

data = []
data.extend(d1)
data.extend(d2)
data.extend(d3)
6
jsmolka 26 Фев 2018 в 13:07

Как насчет:

all_data = data_1 + data_2 + data_3
1
man0v 26 Фев 2018 в 12:34

Просто напишите:

all_data = data_1 + data_2 + data_3

Если вы хотите объединить все соответствующие подсписки этих списков, вы можете написать:

# function that merges all sublists in single list
def flatten(l):
    return [el for subl in l for el in subl]

# zipped - is a list of tuples of corresponding items (our deep sublists) of all the lists
zipped = zip(data_1, data_3, data_3)

# merge tuples to get single list of rearranges sublists
all_data = flatten(zipped)
4
Nikolay Lebedev 26 Фев 2018 в 13:14

Если вы не против того, чтобы быть ленивым, вы также можете сделать

import itertools

all_data = itertools.chain(data1, data2, data3)
0
zsquare 26 Фев 2018 в 12:37

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

data=[]
data[len(data):] = data1
data[len(data):] = data2
data[len(data):] = data3
0
FlyingTeller 26 Фев 2018 в 12:32