[英]Fastest way to group elements of a list of integers by their sign?
我有一個非零整數列表,我想將該列表更改為嵌套列表(=組),其中每個組包含列表中具有相同符號的連續整數。
我使用以下代碼完成了此操作:
a = [1, 2, 3, -4, -5, -6, 7, 8, -9, 10, -11, 12]
groups = [[]]
for (i, x) in enumerate(a):
if x ^ a[i - 1] < 0:
groups.append([x])
else:
groups[-1].append(x)
現在,我的問題是有沒有更快的方法來做到這一點? 或者最快的方法是什么?
itertools.groupby 似乎就是您要找的東西。
import itertools
a = [1, 2, 3, -4, -5, -6, 7, 8, -9, 10, -11, 12]
c = [list(group) for key,group in itertools.groupby(a, lambda x: x>0)]
print(c)
output:
[[1, 2, 3], [-4, -5, -6], [7, 8], [-9], [10], [-11], [12]]
這就是itertools.groupby的用途:
from itertools import groupby
a = [1, 2, 3, -4, -5, -6, 7, 8, -9, 10, -11, 12]
[list(g) for k, g in groupby(a, key=lambda x: x > 0)]
# [[1, 2, 3], [-4, -5, -6], [7, 8], [-9], [10], [-11], [12]]
對於這種事情非常有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.