Python中的数据絮凝
我正在努力寻找絮凝功能中的错误 该函数的目标是获取一个列表,并将每组连续值分块为一个值。例如 [1,4,4,2,0,3,3,3]=>[1,4,2,0,3] 目前的功能是Python中的数据絮凝,python,algorithm,chunking,Python,Algorithm,Chunking,我正在努力寻找絮凝功能中的错误 该函数的目标是获取一个列表,并将每组连续值分块为一个值。例如 [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 index
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,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]
我删除了我原来的答案;在这种情况下,我终于理解了絮凝。很抱歉我在陶瓷行业干了好几年,眼睛都瞎了 你要做的工作太多了,标记出匹配或不匹配的东西。只需从原始列表中构建一个新列表。仅添加与上一个项目不匹配的项目
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]
将第一个if语句更改为if val1 not False:修复了问题。也就是说,我强烈建议你改为以下内容。将列表中的每个元素与前一个元素进行比较的方法要简单得多。它还具有不改变输入列表的优点 代码中的错误是由以下事实引起的:在Python中,False==0被计算为True。这会导致函数中出现两个问题。首先,if块中的代码将针对列表中的每个元素运行,即使您已经将该元素标记为False。这导致了第二个问题:在False元素后面的任何0值都将被视为连续的相等值,因为False==0应该被丢弃。因此,每当有一个0跟在相邻的相等元素后面时,该0将被更改为False,因此不在输出列表中 作为一个简短的说明,下面是输入[2,4,4,0]函数每次迭代开始时列表的外观,其中>表示当前索引
Input: [2, 4, 4, 0]
[>2, 4, 4, 0]
[2, >4, 4, 0]
[2, 4, >False, 0]
[2, 4, False, >False]
Output: [2, 4]
将第一个if语句更改为if val1 not False:修复了问题。也就是说,我强烈建议你改为以下内容。将列表中的每个元素与前一个元素进行比较的方法要简单得多。它还具有不改变输入列表的优点 代码中的错误是由以下事实引起的:在Python中,False==0被计算为True。这会导致函数中出现两个问题。首先,if块中的代码将针对列表中的每个元素运行,即使您已经将该元素标记为False。这导致了第二个问题:在False元素后面的任何0值都将被视为连续的相等值,因为False==0应该被丢弃。因此,每当有一个0跟在相邻的相等元素后面时,该0将被更改为False,因此不在输出列表中 作为一个简短的说明,下面是输入[2,4,4,0]函数每次迭代开始时列表的外观,其中>表示当前索引
Input: [2, 4, 4, 0]
[>2, 4, 4, 0]
[2, >4, 4, 0]
[2, 4, >False, 0]
[2, 4, False, >False]
Output: [2, 4]
我想你可能在找 此函数收集由可选键函数定义的相似项 例如:
import itertools
def flocculate(A):
return [k for k,g in itertools.groupby(A)]
print flocculate([2, 4, 4, 0, 3, 7, 0, 2, 2, 2, 8, 0, 0, 0])
print flocculate([1, 4, 4, 2, 0, 3, 3, 3])
印刷品:
[2, 4, 0, 3, 7, 0, 2, 8, 0]
[1, 4, 2, 0, 3]
我想你可能在找 此函数收集由可选键函数定义的相似项 例如:
import itertools
def flocculate(A):
return [k for k,g in itertools.groupby(A)]
print flocculate([2, 4, 4, 0, 3, 7, 0, 2, 2, 2, 8, 0, 0, 0])
print flocculate([1, 4, 4, 2, 0, 3, 3, 3])
印刷品:
[2, 4, 0, 3, 7, 0, 2, 8, 0]
[1, 4, 2, 0, 3]
对于以后重复一组数字的输入,正确的输出是什么?e、 g.[1,4,4,2,0,3,3,3,1,1,4,2,0,0,8,3,3,0]当你得到一个解决方案时,请记住对有用的东西进行投票,并接受你最喜欢的答案,即使你必须自己写,所以堆栈溢出可以正确地存档问题。Yo@Prune你得到了我的upvote dawg!我只是还没有足够的信用来公开展示我的选票。这就是stackoverflow告诉我的。事实上,每一个答案都有其独特之处。你的,因为它简单而优雅。d-gillis指出了我原始代码中的缺陷。彼得·德·里瓦兹(peter de rivaz)以四票赞成的票数指出了似乎是规范的python处理某些数据的方式。谢谢大家,你们知道对于一个重复一组数字的输入,正确的输出是什么吗?e、 g.[1,4,4,2,0,3,3,3,1,1,4,2,0,0,8,3,3,0]当你得到一个解决方案时,请记住对有用的东西进行投票,并接受你最喜欢的答案,即使你必须自己写,所以堆栈溢出可以正确地存档问题。Yo@Prune你得到了我的upvote dawg!我只是还没有足够的信用来公开展示我的选票。这就是stackoverflow告诉我的。其实每个
答案就其本身而言是相当愚蠢的。你的,因为它简单而优雅。d-gillis指出了我原始代码中的缺陷。彼得·德·里瓦兹(peter de rivaz)以四票赞成的票数指出了似乎是规范的python处理某些数据的方式。谢谢你们,哇,比我走的路线简单多了。如果有人知道这种算法的一个更合适的术语,请让我们都知道。因为谷歌的絮凝算法是非常无用的!哇,比我走的路线简单多了。如果有人知道这种算法的一个更合适的术语,请让我们都知道。因为谷歌的絮凝算法是非常无用的!