簡體   English   中英

按符號對整數列表的元素進行分組的最快方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM