n00*_*bie 0 python random replace
我想删除字符串中的一个空字节,有时用另一个字符替换它.像那样 :
string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"
我正在考虑使用随机和替换,但替换总是从第一个开始:
replace("00","B",1)
Run Code Online (Sandbox Code Playgroud)
所以这不是随机的.
任何帮助将不胜感激 !
编辑:我的意思是零到00,我犯了一个错误:
string ="41 00 36 00 36 00 00 00 57 00 46 00 42 00 41 00 61 00 62 00 73 00 20 00 36 00"
谢谢
不仅如此,00在任何想象中都不是"空" - 它是一个2个字符的字符串.您似乎默默地假设您的字符串由两个十六进制数字的子字符串组成,并且您执行的任何字符串操作都不会知道您的这个小私有约定 - 如果您设法"替换随机00"它很可能是由"F0"的第二个数字组成的一个,然后是"03"的第一个数字:不是你可能的意思!
逻辑上更清晰的方法是首先将您的字符串拆分为2位数字,从而使您的未说出的假设清晰明确:
>>> string = "4100360036000000570046004200410061006200730020003600"
>>> pieces = [string[i:i+2] for i in range(0, len(string), 2)]
>>> pieces
['41', '00', '36', '00', '36', '00', '00', '00', '57', '00', '46', '00', '42', '00', '41', '00', '61', '00', '62', '00', '73', '00', '20', '00', '36', '00']
>>>
Run Code Online (Sandbox Code Playgroud)
是的,这可以更简洁,但我在这里努力寻求清晰度和概念清晰度! - ).
现在找到所有'00'数字:
>>> where0s = [i for i in range(len(pieces)) if pieces[i] == '00']
>>> where0s
[1, 3, 5, 6, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25]
Run Code Online (Sandbox Code Playgroud)
(再次,容易使紧凑,但这是最明确的方式;-).
现在从where0s中随机选择并删除它,或者用例如'BA'替换它,然后重新加入字符串:
>>> import random
>>> pickone = random.choice(where0s)
>>> pickone
25
>>> # if replacing:
...
>>> pieces[pickone] = 'BA'
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036BA'
>>> # if removing:
...
>>> del pieces[pickone]
>>> ''.join(pieces)
'41003600360000005700460042004100610062007300200036'
>>>
Run Code Online (Sandbox Code Playgroud)
如果这确实是你想要执行的确切操作,但是你想要更简洁和速度而不是这个完全拼写的清晰度,我们当然可以继续发展这个想法!
| 归档时间: |
|
| 查看次数: |
2348 次 |
| 最近记录: |