Как создать многомерный массив на лету, используя python? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть al oop, который генерирует список значений при каждом запуске, в конце каждой итерации я хочу добавить все списки в один многомерный массив

У меня есть:

  • value_list = [1,2,3,4] в 1-й итерации
  • value_list = [5,6,7,8] в 2-й итерации
  • value list = [9,10,11,12] в 3-й итерации
  • et c ...

В конце каждой итерации мне нужен один многомерный массив, такой как

  • value_list_copy = [[1,2,3,4]] в 1-й итерации
  • value_list_copy = [[1,2,3,4],[5,6,7,8]] во 2-й итерации
  • value_list_copy = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
  • et c ...

Как мне этого добиться?

Спасибо

Ответы [ 5 ]

2 голосов
/ 09 апреля 2020

Вы можете использовать вложенное понимание и itertools.count:

from itertools import count, islice

cols = 4
rows = 5

c = count(1)
matrix = [[next(c) for _ in range(cols)] for _ in range(rows)]
# [[1, 2, 3, 4], 
#  [5, 6, 7, 8], 
#  [9, 10, 11, 12], 
#  [13, 14, 15, 16], 
#  [17, 18, 19, 20]]

Крутые дети могут также захотеть zip подсчитать итератор с собой:

list(islice(zip(*[c]*cols), rows))
# [(1, 2, 3, 4), 
#  (5, 6, 7, 8), 
#  (9, 10, 11, 12), 
#  (13, 14, 15, 16), 
#  (17, 18, 19, 20)]
1 голос
/ 09 апреля 2020

Попробуйте:

limit = 10
length_of_elements_in_each_list = 4
[range(i, i+length_of_elements_in_each_list) for i in range(1, limit)]

Вы можете установить лимит и length_of_elements_in_each_list в соответствии с вашими потребностями.

1 голос
/ 09 апреля 2020

Если вы используете Python3 .8 , используйте Walrus assignment (:=).

Для Syntax and semantic.

count=0
rows=5
cols=4
[[(count:=count+1) for _ in range(cols)] for _ in range(rows)]

Выход:

[[1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
 [13, 14, 15, 16],
 [17, 18, 19, 20]]

Без использования :=.

rows=5
cols=4
[list(range(i,i+cols)) for i in range(1,rows*cols,cols)]
0 голосов
/ 09 апреля 2020

Вот два других возможных решения:

Двойной для l oop заход на посадку

rows, cols, start = 3, 4, 1

value_list_copy = []
for j in range(rows):
    value_list = []
    for i in range(start, cols + start):
        value_list.append((j*cols)+i)
    value_list_copy.append(value_list)
    print(
        f'value_list = {value_list}\n'
        f'value_list_copy = {value_list_copy}\n'
    )

Метод списка компоновки

rows, cols, start = 3, 4, 1

value_list_copy_2 = [
    [
        (j*cols)+i for i in range(start, cols + start)
    ] for j in range(rows)
]
print(f'value_list_copy_2 = {value_list_copy_2}')

Python Репетитор Ссылка на пример кода

0 голосов
/ 09 апреля 2020

Попробуйте это ниже:

value_list_copy = []

for i in range(n): # ----------> Assuming n is the number of times your loop is running
    value_list_copy.append(value_list)  # ------ Append your value list in value_list_copy in every iteration

Здесь вы получите массив массивов.

print(value_list_copy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...