我有一个看起来像这样的列表:
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
答案 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']
现在,将此列表切成块。这是一个已经解决的问题,在此处无限讨论:
答案 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)