Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Dictionary - Fatal编程技术网

Python 检测列表中的连续相同值

Python 检测列表中的连续相同值,python,list,dictionary,Python,List,Dictionary,我将一个数据集组织到列表字典中,如: { UUID: [3, 3, 5, 3, 0, 0, 3, 3, 2, 3, 2, 1, 1, 0, 2, 0, 5, 0, 0, 0, 0, 3, 4, 1, 2], UUID: [1, 2, 3, 1, 0, 0, 2] } 我想检测连续相同值(特别是0)的情况,特别是检测n个连续相同值的实例 例如,如果n为3,值为0,我会将第一个key:value对的UUID附加到符合条件的UUID列表中,但不会附加到第二个 用这种方法检测连续相同值的最有效方

我将一个数据集组织到列表字典中,如:

{ UUID: [3, 3, 5, 3, 0, 0, 3, 3, 2, 3, 2, 1, 1, 0, 2, 0, 5, 0, 0, 0, 0, 3, 4, 1, 2], 
  UUID: [1, 2, 3, 1, 0, 0, 2] }
我想检测连续相同值(特别是0)的情况,特别是检测n个连续相同值的实例

例如,如果n为3,值为0,我会将第一个key:value对的UUID附加到符合条件的UUID列表中,但不会附加到第二个


用这种方法检测连续相同值的最有效方法是什么

使用
itertools.groupby
检测连续数字的运行:

uuids = { 'a': [3, 3, 5, 3, 0, 0, 3, 3, 2, 3, 2, 1, 1, 0, 2, 0, 5, 0, 0, 0, 0, 3, 4, 1, 2], 
  'b': [1, 2, 3, 1, 0, 0, 2]}

from itertools import groupby 

def detect_runs_in_dict(d, n=3):
    return [uuid for uuid, val in d.items() #in python 2, use .iteritems
        if any(len(list(g)) >= n for k,g in groupby(val))]
演示

这并不区分“运行”中可以包含哪些值-如果您想指定它,可以直接添加:

def detect_runs_in_dict(d, n=3, searchval=0):
    return [uuid for uuid, val in d.items() 
        if any(k == searchval and len(list(g)) >= n for k,g in groupby(val))]

使用
itertools.groupby
检测连续数字的运行:

uuids = { 'a': [3, 3, 5, 3, 0, 0, 3, 3, 2, 3, 2, 1, 1, 0, 2, 0, 5, 0, 0, 0, 0, 3, 4, 1, 2], 
  'b': [1, 2, 3, 1, 0, 0, 2]}

from itertools import groupby 

def detect_runs_in_dict(d, n=3):
    return [uuid for uuid, val in d.items() #in python 2, use .iteritems
        if any(len(list(g)) >= n for k,g in groupby(val))]
演示

这并不区分“运行”中可以包含哪些值-如果您想指定它,可以直接添加:

def detect_runs_in_dict(d, n=3, searchval=0):
    return [uuid for uuid, val in d.items() 
        if any(k == searchval and len(list(g)) >= n for k,g in groupby(val))]

您可以使用
itertools.groupby
通过以下方式获得给定值的最大连续出现次数:

max(
  filter(
    lambda gr:gr[0]==0,
    groupby(_list)
  ), key=lambda gr:len(list(gr[1]))
)

您可以对结果的第二个参数重新应用
len(list())
,也可以简单地调整过滤器以消除连续出现次数少于所需次数的结果。

您可以使用
itertools.groupby
通过以下方式获得给定值的最大连续出现次数:

max(
  filter(
    lambda gr:gr[0]==0,
    groupby(_list)
  ), key=lambda gr:len(list(gr[1]))
)

您可以对结果的第二个参数重新应用
len(list())
,或者,您可以简单地调整过滤器,以消除连续出现次数少于所需次数的结果。

如果有多个可行的候选项,会发生什么情况?我认为您只需迭代列表中的每个键和每个值即可找到连续的VAL。我不认为会有任何技巧使它比那更快你是说在列表中?例如,如果列表中有3个连续的0两次。我会将UUID添加到列表中一次。这是一种二元区别;key:value对符合条件(包含>=1个连续相同整数的实例)或不符合条件。还要看看如果有多个可行的候选项会发生什么?我认为您只需遍历列表中的每个键和每个值即可找到连续的VAL。我不认为会有任何技巧使它比那更快你是说在列表中?例如,如果列表中有3个连续的0两次。我会将UUID添加到列表中一次。这是一种二元区别;key:value对符合条件(包含>=1个连续相同整数的实例)或不符合条件。另请参阅