Python 如何按顺序查找和替换偶数定位元素的值

Python 如何按顺序查找和替换偶数定位元素的值,python,arrays,pandas,numpy,dataframe,Python,Arrays,Pandas,Numpy,Dataframe,我的名单如下: list_1 = [12, 15, 18, 21, 6, 9, 7, 21, 38, 62, 65, 68, 81, 21, 25, 96, 101, 8, 11] 存在值的距离相等的元素序列。在此列表中,该距离为3,例如12、15、18、21 如何将这些序列/子列表的偶数元素的值替换为新值,例如-1。输出将是: list_2 = [12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]

我的名单如下:

list_1 = [12, 15, 18, 21, 6, 9, 7, 21, 38, 62, 65, 68, 81, 21, 25, 96, 101, 8, 11]
存在值的距离相等的元素序列。在此列表中,该距离为
3
,例如
12、15、18、21

如何将这些序列/子列表的偶数元素的值替换为新值,例如-1。输出将是:

list_2 = [12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]
使用

产生

[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, 65, -1, 81, 21, 25, 96, 101, 8, 11]
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]

现在,如果您想要与这些序列中的每个序列独立相关的偶数位置,请使用和

产生

[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, 65, -1, 81, 21, 25, 96, 101, 8, 11]
[12, -1, 18, -1, 6, -1, 7, 21, 38, 62, -1, 68, 81, 21, 25, 96, 101, 8, -1]


差异将是示例中的最后一个
-1
。第一种解决方案假定不应更换
11
,因为它在
列表中的位置不均匀。第二种解决方案假设它应该被替换,因为它在子列表中处于偶数位置
[8,11]

对于基于numpy的方法,我们可以使用
np.diff
找到数组的第一个差异,并通过取
np.arange
的2模来检查项是否偶数。然后,我们可以用
按位和
链接这两个条件,并将切片分配回
a

a = np.array([12, 15, 18, 21, 6, 9, 7, 21, 38, 62, 65, 68, 81, 21, 25, 96, 101, 8, 11])

m = (np.diff(a)==3) & (np.arange(1,len(a))%2==1)
a[1:] = np.where(m, -1, a[1:])


成功了,谢谢。编辑问题以明确每个序列/子列表中偶数元素的替换
print(a)
array([ 12,  -1,  18,  -1,   6,  -1,   7,  21,  38,  62,  65,  -1,  81,
        21,  25,  96, 101,   8,  11])