python - 检查连续的相似值并替换

标签 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])。

我该怎么做? (或者也许你可以告诉我工具,如果有的话)

<小时/>

(最后一句不太重要)

此外,我需要最小特征值<10。如果在索引序列中所有特征值都>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]

请注意,在您的示例中,列表索引具有不同的长度。我已在 indices 中插入了一个额外的 3 项目来解决此问题。

以下交互式 session 演示了上面的代码片段的工作原理:

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_char_vals 的元素保持在阈值以下,您需要对 min_char_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_char_vals的第一个元素的值大于或时,为其分配一个默认的最小特征值(我在代码中使用了0)等于10

如果将初始化更改为:

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]

关于python - 检查连续的相似值并替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37968408/

相关文章:

python - 如何表明至少需要一个参数?

python - PSQL - 如果列值等于特定字符串,如何过滤掉

python - 如何使用 GitPython 将 master 分支 merge 到 feature 分支?

python - QSignalTransition 子类从未收到自定义 PyQt 信号

django - 将初始值传递给使用 TinyMCE 小部件的表单 CharField 时,“CharField”对象没有属性 'is_hidden'

python-3.x - 使用分类数据集 : how to deal with different values (less number) in categorical data 进行 One-hot 编码

Python 模块 Mahotas 阈值问题

python - 如何使用 lxml Python(来自 .XML 文件)有效解析特定行?

python - 抓取特定文本的嵌套网页

python - wxpython ProgressDialog 取消事件可能吗?