替换数组

时间:2017-07-03 08:47:48

标签: python arrays python-3.x numpy

我有一个数组,让我们这样说:

  

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"的{​​{1}}替换为"81", "02"。我试过但它没有适当地替换这些值。这是我的代码。

"82"

如果有人可以帮助我解决这个问题,那将会很棒。谢谢。

2 个答案:

答案 0 :(得分:3)

鉴于您的两个字符串,您可以将列表转换为字符串并使用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']

效率不高但qiute简洁易读。

答案 1 :(得分:0)

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

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