Разбить список в подсписках, задав желаемый размер списка в python

У меня есть список, который выглядит так:

arr = [['3'], ['1', '0.0'], ['2', '0.05'], ['3', '0.1'], ['1', '1'], ['2', '1'], ['3', '1']]

Я хотел бы разбить этот список на меньшие подсписки, размер которых указан в первом элементе исходного списка (например, здесь 3) и состоит только из второго элемента. Какой самый питонический способ сделать это?

sublist1 = [0.0, 0.05, 0.1]
sublist2 = [1, 1, 1]

Я попытался использовать понимание списка, но я не знаю, как назначить forцикл для цикла через массив (т. Е. Между индексами 1 и 3 или между индексами 4 и 6 в примере arrвыше).

n_nodes = arr[0][0] # gets number of nodes, 3
first_section = [element[1] for element in arr]

python,python-3.x,

1

Ответов: 3


3 принят

Давайте разберем его на простые шаги. Во-первых, получим размер блока как целое число:

>>> [n] = arr[0]
>>> n = int(n)
>>> n
3

Затем получите список вторых элементов. Существует несколько способов сделать это, но наиболее читаемым является использование списка:

>>> bs = [b for [a,b] in arr[1:]]
>>> bs
['0.0', '0.05', '0.1', '1', '1', '1']

Теперь переместите этот список в куски. Это уже решена проблема, обсуждаемая здесь бесконечно:

Как вы разбиваете список на куски с равномерным размером?


1

Используйте, list.pop()чтобы получить первый элемент и преобразовать его в целое. После этого используйте нарезку.

arr = [['3'], ['1', '0.0'], ['2', '0.05'], ['3', '0.1'], ['1', '1'], ['2', '1'], ['3', '1']]


size = int(arr.pop(0)[0])


l = [o[1] for o in arr]
res = [l[size*i:size*(i+1)] for i in range(len(l) // 3)]

print(res)

1

Понимание рабочего списка:

[[e[1] for e in arr[i+1:i+int(arr[0][0])+1]] for i in range(0, len(arr)-1, int(arr[0][0]))]
#[['0.0', '0.05', '0.1'], ['1', '1', '1']]
питон, питон-3.x,
Похожие вопросы