簡體   English   中英

比較Python列表中值之間的差異

[英]Comparing Difference between Values within Python List

假設我有一個整數列表:

list = [1,2,3,5,6,7,10,11,12]

我想將列表分為三個單獨的列表,拆分發生在連續整數之間,且差值> = 2,這將給我

list1 = [1, 2, 3]
list2 = [5, 6, 7]
list3 = [10, 11, 12]

有沒有一種簡單的方法可以在Python中做到這一點? 為了分析來自心理學實驗的數據,我想這樣做,在該實驗中,我列出了帶有時間戳記的響應,並希望根據響應之間的距離對響應進行聚類

看一下這個StackOverflow問題 那里的答案顯示了如何將列表划分為連續整數的子列表。

從接受的答案那里:

>>> 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然后給出索引,值對的列表。 然后,它使用索引減去值作為組項目的鍵。 看看這對您的列表有什么作用:

>>> 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]

如您所見,連續的值最終具有相同的分組鍵。 這是因為

如果data [i] + 1 == data [i + 1]:

然后data [i]-i == data [i] +1-1-i == data [i + 1]-(i +1)

僅供參考, groupby來自itertoolsitemgetter來自operator 因此,將以下幾行添加到您的導入中:

from itertools import groupby
from operator import itemgetter

請注意,此解決方案僅在對data進行排序且不包含任何重復項的情況下才有效。 當然,將列表轉換為排序集非常簡單:

>>> 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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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