[英]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.