在python
中,我想基于一个键将元素组合在一起(在下面的示例中,键是第二个元素,或element[1]
)。
initial_array = [[10, 0], [30, 0], [40, 2], [20, 2], [90, 0], [80, 0]]
只有哪些键相同且相邻的元素才能组合在一起。
splited_array = [ [[10, 0], [30, 0]],
[[40, 2], [20, 2]],
[[90, 0], [80, 0]] ]
此外,我希望导致拆分的元素也位于前一个数组的末尾。
splited_array = [ [[10, 0], [30, 0], [40, 2]],
[[40, 2], [20, 2], [90, 0]],
[[90, 0], [80, 0]] ]
在python中最简单的方法是什么? (如果可能,重新使用Built-in Functions)
答案 0 :(得分:4)
您可以使用itertools.groupby
:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> lis = [[10, 0], [30, 0], [40, 2], [20, 2], [90, 0], [80, 0]]
>>> [list(g) for k,g in groupby(lis, key=itemgetter(1))]
[[[10, 0], [30, 0]],
[[40, 2], [20, 2]],
[[90, 0], [80, 0]]]
第二个:
>>> ans = []
for k,g in groupby(lis, key=itemgetter(1)):
l = list(g)
ans.append(l)
if len(ans) > 1:
ans[-2].append(l[0])
...
>>> ans
[[[10, 0], [30, 0], [40, 2]],
[[40, 2], [20, 2], [90, 0]],
[[90, 0], [80, 0]]]
<强>更新强>
>>> from itertools import zip_longest
>>> lis = [[[10, 0], [30, 0]],
[[40, 2], [20, 2]],
[[90, 0], [80, 0]]]
>>> [x + ([y[0]] if y else []) for x,y in
zip_longest(lis,lis[1:])]
[[[10, 0], [30, 0], [40, 2]],
[[40, 2], [20, 2], [90, 0]],
[[90, 0], [80, 0]]]