给定所需的python列表大小,将列表分解为子列表

时间:2018-08-25 17:19:33

标签: python python-3.x

我有一个看起来像这样的列表:

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

我想将此列表分解为较小的子列表,这些子列表的大小在原始列表的第一个元素中给出(例如此处为3个),并且仅由第二个元素组成。最Python化的方式是什么?

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

我尝试使用列表推导,但是我不知道如何规定for循环来遍历数组(例如,在示例{中,在索引1和3之间或在索引4和6之间) {1}})。

arr

3 个答案:

答案 0 :(得分: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']

现在,将此列表切成块。这是一个已经解决的问题,在此处无限讨论:

How do you split a list into evenly sized chunks?

答案 1 :(得分: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']]

答案 2 :(得分: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)