我希望根据条件将列表拆分为多个列表。如果系列中的差异增长超过4,则触发将列表拆分为最后一个拆分项目中的该项目。
例如:
$$$
+
LB
C,0,82938DFF897 (C, public/random, address)
按条件
in = [1,2,3,9,10,11,100,200]
out = [ [1,2,3 ], [ 9,10,11 ], [100], [200] ]
答案 0 :(得分:3)
def splitlist(L):
if not L: return []
answer = [[L[0]]]
for i in L[1:]:
if i - answer[-1][-1] < 4:
answer[-1].append(i)
else:
answer.append([i])
return answer
输出:
In [112]: splitlist([1,2,3,9,10,11,100,200])
Out[112]: [[1, 2, 3], [9, 10, 11], [100], [200]]
答案 1 :(得分:2)
注意:中的和下一个分别是Python关键字和内置函数。
诀窍是使用zip()
函数和相同列表的2个切片,但转移到一个项目上:
in_list = [1, 2, 3, 9, 10, 11, 100, 200]
parts = [[]]
for prev_item, next_item in zip(in_list[:-1], in_list[1:]):
top = parts[-1]
top.append(prev_item)
if next_item - prev_item > 4:
parts.append([])
top = parts[-1]
top.append(in_list[-1])
输出结果为:
[[1, 2, 3], [9, 10, 11], [100], [200]]
答案 2 :(得分:2)
使用numpy
模块的简短解决方案:
import numpy as np
arr = np.array([1,2,3,9,10,11,100,200])
out = [a.tolist() for a in np.split(arr, np.where(np.diff(arr) > 4)[0]+1)]
print(out)
输出:
[[1, 2, 3], [9, 10, 11], [100], [200]]
np.where(np.diff(arr) > 4)
- 找到数据索引,其中条件&#34;下一个值与上一个值之间的差异大于4&#34; 符合
np.split(x, indices)
- 按关键指数分割初始数组
答案 3 :(得分:0)
可能的方法之一:
ls = [1,2,3,9,10,11,100,200, 201, 209]
#output list
output = list()
startind = 0
for ind, val in enumerate(ls):
if ls[ind]-ls[ind-1] > 4:
output.append(ls[startind:ind])
startind = ind
# appending the left over from last detected difference of 4
output.append(ls[startind:])
print output
输出:[[1,2,3],[9,10,11],[100],[200,201],[209]]