请问这个python的功能怎么实现

例如有两个数组ns=['2', '3', '7', '3', '4', '7', '1', '7', '1', '2', '3', '7', '1', '3', '4', '6', '1', '2', '3', '4', '6', '7', '2', '4', '5', '6', '7', '3', '5', '6', '1', '2']
ws=['1', '1', '1', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '8', '8', '8', '9', '9', '9', '9', '10']
和一个初始二进制字符串str="00000000"
现在需要根据ns中的字符位置来修改str中的值为1.这个功能怎么实现呢?写了一上午搞得晕晕的。。

比如ws的值为111 则代表str有三个位置需要修改 分别为2、3、7的位置,也就是把00000000改成01100010

ws的值为33 则代表str有两个位置要修改 分别为1、7 也就是把00000000改成10000010

然后返回所有修改后的str 请教大神这种怎么做,小菜写了一上午,实在实现不了,求大神思路指点、
以上的ns和ws的元素数量是不固定的。

阅读 2.1k
2 个回答
ns = ['2', '3', '7', '3', '4', '7', '1', '7', '1', '2', '3', '7', '1', '3', '4', '6', '1', '2', '3', '4', '6', '7', '2',
      '4', '5', '6', '7', '3', '5', '6', '1', '2']
ws = ['1', '1', '1', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '7',
      '7', '7', '7', '7', '8', '8', '8', '9', '9', '9', '9', '10']

str = "00000000"

ws1 = '111'
start = ''.join(ws).find(ws1)
end = start + len(ws1)

lst_str = list(str)
for _ in ns[start:end]:
    lst_str[int(_)] = '1'

print ''.join(lst_str)

python3

ns=['2', '3', '7', '3', '4', '7', '1', '7', '1', '2', '3', '7', '1', '3', '4', '6', '1', '2', '3', '4', '6', '7', '2', '4', '5', '6', '7', '3', '5', '6', '1', '2']
ws=['1', '1', '1', '2', '2', '2', '3', '3', '4', '4', '4', '4', '5', '5', '5', '5', '6', '6', '6', '6', '6', '6', '7', '7', '7', '7', '7', '8', '8', '8', '9', '9', '9', '9', '10']

def fnc():
    d={}
    for w,n in zip(ws,ns):
        d.setdefault(int(w),0)
        d[int(w)] |= 1<<(8-int(n))
    for k,v in d.items():
        print('{}: {:08b}'.format(k,v))
            
fnc()

结果:

1: 01100010
2: 00110010
3: 10000010
4: 11100010
5: 10110100
6: 11110110
7: 01011110
8: 00101100
9: 11000000
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题