首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较Python列表中值之间的差异

比较Python列表中值之间的差异
EN

Stack Overflow用户
提问于 2014-04-29 20:15:32
回答 1查看 158关注 0票数 0

假设我有一个整数列表:

代码语言:javascript
运行
复制
list = [1,2,3,5,6,7,10,11,12]

我想把这个列表除以三个单独的列表,在具有不同>=2的连续整数之间发生分裂,这将给我

代码语言:javascript
运行
复制
list1 = [1, 2, 3]
list2 = [5, 6, 7]
list3 = [10, 11, 12]

在Python中有一种简单的方法可以做到这一点吗?我想这样做是为了分析心理学实验中的数据,在这个实验中,我有一个时间戳响应列表,并且希望根据它们之间的距离来聚类响应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-29 20:25:08

看看this StackOverflow question。这里的答案向您展示了如何将列表划分为连续整数的子列表。

从已接受的答复来看:

代码语言:javascript
运行
复制
>>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]
>>> for k, g in groupby(enumerate(data), lambda (i,x):i-x):
...     print map(itemgetter(1), g)
...
[1]
[4, 5, 6]
[10]
[15, 16, 17, 18]
[22]
[25, 26, 27, 28]

答案并没有解释这里发生了什么,所以我会解释。首先,它假定data按升序排序。枚举data然后给出一个索引、值对的列表。然后,它使用索引减去值作为分组项的键。看看这会给你的列表带来什么:

代码语言:javascript
运行
复制
>>> myList = [1,2,3,5,6,7,10,11,12]
>>> [i - x for i, x in enumerate(myList)]
[-1, -1, -1, -2, -2, -2, -4, -4, -4]

如您所见,连续值最终具有相同的分组键。这是因为

如果datai +1 == datai+1: 然后是datai -i == datai +1-1-i == datai+1 - (i + 1)

groupby来自itertoolsitemgetter来自operator。因此,将这些行添加到您的导入:

代码语言:javascript
运行
复制
from itertools import groupby
from operator import itemgetter

请注意,只有在对data进行排序并且不包含任何重复项的情况下,此解决方案才能工作。当然,将列表转换为排序集非常简单:

代码语言:javascript
运行
复制
>>> myList = [1, 1, 3, 5, 6, 4, 10, 12, 11, 1, 2]
>>> myList = list(sorted(set(myList)))
>>> print myList
[1, 2, 3, 4, 5, 6, 10, 11, 12]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23374437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档