Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Python 3.x - Fatal编程技术网

Python 检查连续的相似值并更换

Python 检查连续的相似值并更换,python,python-3.x,Python,Python 3.x,我有一个索引值列表,如[1,1,2,2,2,3,3,4,4,4,5,5],另一个列表包含每个索引的特征值,如[3,14,6,13,15,3,7,18,4,12,17,2,9]。对于相同序列的第一个索引(例如[2,2,2]中的前2个),特征值总是最小的(例如,这里是6),并且随着相似索引的数量增加而增加(例如,对于索引2,它朝15增加) 我希望Python查找类似的索引(索引序列),然后更改它们的特征值,以便每个索引获得最小特征值(例如,[2,2,2]将具有[6,6,6],而不是[6,13,15]

我有一个索引值列表,如[1,1,2,2,2,3,3,4,4,4,5,5],另一个列表包含每个索引的特征值,如[3,14,6,13,15,3,7,18,4,12,17,2,9]。对于相同序列的第一个索引(例如[2,2,2]中的前2个),特征值总是最小的(例如,这里是6),并且随着相似索引的数量增加而增加(例如,对于索引2,它朝15增加)

我希望Python查找类似的索引(索引序列),然后更改它们的特征值,以便每个索引获得最小特征值(例如,[2,2,2]将具有[6,6,6],而不是[6,13,15])

我怎么做?(或者,如果有的话,你可以给我指一下工具)


(最后一句话不那么重要)


此外,我需要最小特征值为10,我想通过从上一个索引序列中获取最小特征值来替换它们。

尝试一下此代码:

from itertools import groupby
from operator import itemgetter
indices = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5]
values = [3, 14, 6, 13, 15, 3, 7, 18, 4, 12, 17, 2, 9]
pairs = zip(indices, values)
sequences = [[v for (i, v) in group] for (_, group) in groupby(pairs, itemgetter(0))]
min_char_vals = [min(seq) for seq in sequences for _ in seq]
请注意,在您的示例中,列表
索引
的长度不同。我在
索引中插入了一个额外的
3
项来解决此问题

以下交互式会话演示了上述代码段的工作原理:

In [232]: pairs
Out[232]: 
[(1, 3),
 (1, 14),
 (2, 6),
 (2, 13),
 (2, 15),
 (3, 3),
 (3, 7),
 (3, 18),
 (4, 4),
 (4, 12),
 (4, 17),
 (5, 2),
 (5, 9)]

In [233]: sequences
Out[233]: [[3, 14], [6, 13, 15], [3, 7, 18], [4, 12, 17], [2, 9]]

In [234]: min_char_vals
Out[234]: [3, 3, 6, 6, 6, 3, 3, 3, 4, 4, 4, 2, 2]
至于问题的第二部分,为了将
min\u char\u vals
的元素保持在阈值以下,您需要对
min\u char\u vals
进行一些就地后处理:

for i, mcv in enumerate(min_char_vals):
    if mcv >= 10:
        min_char_vals[i] = 0 if i == 0 else min_char_vals[i-1]
min\u char\u vals
的第一个元素的值大于或等于
10
时,条件表达式旨在为该元素指定一个默认的最小特征值(我在代码中使用了
0

如果将初始化更改为:

values = [3, 14, 6, 13, 15, 13, 17, 18, 4, 12, 17, 2, 9]
然后执行所述的后处理,得到的结果如下:

In [280]: min_char_vals
Out[280]: [3, 3, 6, 6, 6, 6, 6, 6, 4, 4, 4, 2, 2]
指示工具并非如此。如果您提供