gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:14 25 4
gpt4 key购买 nike

我有一个索引值列表,如 [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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com