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])