Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的数据絮凝_Python_Algorithm_Chunking - Fatal编程技术网

Python中的数据絮凝

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

我正在努力寻找絮凝功能中的错误

该函数的目标是获取一个列表,并将每组连续值分块为一个值。例如

[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,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处理某些数据的方式。谢谢你们,哇,比我走的路线简单多了。如果有人知道这种算法的一个更合适的术语,请让我们都知道。因为谷歌的絮凝算法是非常无用的!哇,比我走的路线简单多了。如果有人知道这种算法的一个更合适的术语,请让我们都知道。因为谷歌的絮凝算法是非常无用的!