繁体   English   中英

替换数组中的一组值

[英]Replace group of value in an array

我有一个数组,可以这样说:

arr = [“ 60”,“ DD”, “ 81”,“ 01” ,“ 01”,“ 29”,“ B8”,“ 1B”,“ 00”,“ 30”,“ 2C”,“ 46” ,“ 00”,“ 0A”, “ 81”,“ 02” ,“ 0D”,“ 25”,“ 00”,“ 37”,“ 41”,“ 31”,“ 00”,“ C2”,“ 7F”,“ 06”,“ 00”,“ 17”,“ 94”,“ 1A”,“ 00”,“ 48”,“ 06”,“ 05”,“ 00”,“ 5C”,“ 7F” ,“ 3E”,“ 87”,“ FF”,“ 0F”,“ B8”,“ 0A”,“ 38”,“ 0C”]

我试图取代的每一次出现"81", "01""81""81", "02""82" 我试过了,但是没有正确替换值。 这是我的代码。

import numpy as np
values = np.array(arr)
searchval = ["81", "01"]
N = len(searchval)
possibles = np.where(values == searchval[0])[0]

solns = []
for p in possibles:
    check = values[p:p+N]
    if np.all(check == searchval):
        arr.pop(p+1)
        solns.append(p)

print(solns)

如果有人可以帮助我解决这个问题,那就太好了。 谢谢。

给定两个字符串,您可以将列表转换为字符串,并用str.replace进行替换,然后拆分以返回转换后的列表:

s = ' '.join(arr)
s = s.replace('81 01', '81')
s = s.replace('81 02', '82')
print s.split()
# ['60', 'DD', '81', '01', '29', 'B8', '1B', '00', '30', '2C', '46', '00', '0A', '82', '0D', '25', '00', '37', '41', '31', '00', 'C2', '7F', '06', '00', '17', '94', '1A', '00', '48', '06', '05', '00', '5C', '7F', '3E', '87', 'FF', '0F', 'B8', '0A', '38', '0C']

效率不是很高,但是丘特语简洁而可读。

对于仅适用于列表的方法,并将其推广到其他类型的值:

solns = [arr[0]]
for i, entry in enumerate(arr[:-1]):
    if entry == '81':
        if arr[i+1] == '02':
            solns[-1] = '82'
        elif not arr[i+1] == '01':
            solns.append(arr[i+1])
    else:
        solns.append(arr[i+1])

或者,如果您愿意:

solns = [arr[0]]
for i, entry in enumerate(arr[:-1]):
    if entry == '81':
        if arr[i+1] == '02':
            solns[-1] = '82'
            continue
        elif arr[i+1] == '01':
            continue
    solns.append(arr[i+1])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM