我正在努力寻找我的絮凝功能的错误。
函数的目标是获取一个列表,并将每组连续值分块为一个值例如。。。[1, 4, 4, 2, 0, 3, 3, 3] => [1, 4, 2, 0, 3]
现在的功能是…
def flocculate(array):
for index1, val1 in enumerate(array):
if val1 == 0 or not not val1:
new_array = array[index1+1:]
for index2, val2 in enumerate(new_array):
if array[index1] == val2:
array[index1 + index2 + 1] = False
else:
break
return [value for value in array if type(value) is not bool]
然而,它似乎不能很好地处理零。
例如,下面显示的输入得到了一些正确的零,但错过了一些其他的…
[2, 4, 4, 0, 3, 7, 0, 2, 2, 2, 8, 0, 0, 0] => [2, 4, 3, 7, 0, 2, 8, 0]
最佳答案
我删去了原来的答案;我终于理解了这方面的“絮凝”。对不起的。。。我在陶瓷行业工作了好几年,弄瞎了眼睛。
你要做的工作太多了,标记那些符合或不符合的东西只需从原始列表中创建一个新列表只添加与上一个不匹配的项。
test_list = [
[1, 4, 4, 2, 0, 3, 3, 3],
[2, 4, 4, 0, 3, 7, 0, 2, 2, 2, 8, 0, 0, 0],
[-122, 4, 14, 0, 3, 7, 0, 2, 2, -2, 8, 0, 0, 0, 9999]
]
def flocculate(array):
# return list(set(array))
result = []
last = None
for i in array:
if i != last:
result.append(i)
last = i
return result
for array in test_list:
print array, "\n =>", flocculate(array)
输出:
[1, 4, 4, 2, 0, 3, 3, 3]
=> [1, 4, 2, 0, 3]
[2, 4, 4, 0, 3, 7, 0, 2, 2, 2, 8, 0, 0, 0]
=> [2, 4, 0, 3, 7, 0, 2, 8, 0]
[-122, 4, 14, 0, 3, 7, 0, 2, 2, -2, 8, 0, 0, 0, 9999]
=> [-122, 4, 14, 0, 3, 7, 0, 2, -2, 8, 0, 9999]