Itertools groupby使用另一个列表对列表进行分组

时间:2019-01-02 22:52:33

标签: python list

在大熊猫中,您可以将等长长度的序列用于lengthStr = strlen(token); newUser->userName = malloc(lengthStr+1); ... strcpy(newUser->userName, token); 的另一个序列中,例如:

const fileElems = document.querySelectorAll('#files div.file-info a.link-gray-dark');
const filePaths = [];

for (let a of fileElems) {
    filePaths.push(a.title);
}

const filePathsStr = filePaths.join('\n');
console.log(filePathsStr);
copy(filePathsStr);
console.log('Copied to the clipboard as well ');

是否可以使用GroupBy做同样的事情?因此,使用另一个列表从当前列表创建组吗?还是使用一些密钥?只要能使我了解如何解决这种情况s = pd.Series([1,1,1,-2,-4,-3,1,2]) g = np.sign(s).diff().fillna(0).abs().cumsum() s.groupby(g).count() 0.0 3 2.0 3 4.0 2 dtype: int64 以便根据唱歌创建组就好。

预期输出:

itertools.groupby

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

maximumDrawableCount

输出

from itertools import groupby


data =  [1,1,1,-2,-4,-3,1,2]

result = [sum(1 for _ in group) for _, group in groupby(data, lambda x: x<= 0)]
print(result)

语句:[3, 3, 2] 计算组中元素的数量。键sum(1 for _ in group) sign 函数。

答案 1 :(得分:0)

对于基于匹配值将一个可迭代项分组为另一个可迭代项的一般情况,您可以使一个作弊的key函数迭代另一个可迭代项,例如使用原始的sg

>>> from itertools import groupby
>>> print([(k, len(list(grp))) for k, grp in groupby(s, key=lambda _, ig=iter(g): next(ig))])
[(0.0, 3), (2.0, 3), (4.0, 2)]

key函数接受来自s的值并忽略它,而是从手动迭代g来返回匹配的值(默认的第二个参数会缓存从{{1}创建的迭代器},然后每次使用g手动将其前进;将第二个参数传递给next,以静默忽略不匹配的长度,并简单地替换为默认值)。

很明显,对于这种特定情况,有better approaches,但我是在回答所问的一般问题,而不是特定示例。