Python2.7转3.9时zip相关代码报错:字符串无法用&运算符
解决Python3中字符串无法使用&按位与的问题
问题根源很明确:Python2里的str本质是字节串,支持&按位与操作;但Python3里的str是Unicode字符串,不再支持这个运算符,这才是报错的核心(和zip转不转list没关系)。以下是几种针对性的解决方法:
方法1:单字符字符串转整数处理
如果mask_1里的元素都是单字符字符串,直接把字符转成ASCII整数做按位与,再转回字符:
mask_1 = np.asarray([chr(ord(w1) & ord(w2)) for w1,w2 in zip(mask_1[::2], mask_1[1::2])])
方法2:字符串转字节串处理
如果字符串是ASCII范围内的多字符内容,先转成bytes类型再执行按位与:
mask_1 = np.asarray([w1.encode('ascii') & w2.encode('ascii') for w1,w2 in zip(mask_1[::2], mask_1[1::2])])
注意:如果字符串包含非ASCII字符,encode('ascii')会报错,这时候需要根据实际编码选择对应的编码格式(比如utf-8),但按位与后的结果可能不符合预期,需谨慎使用。
方法3:利用numpy数组类型转换(更高效)
如果mask_1本身是numpy字符串数组,直接转换数组类型来处理,避免Python循环的开销:
# 把字符串数组转成对应ASCII值的整数数组 mask_int = np.vectorize(ord)(mask_1) # 两两执行按位与操作 mask_int = mask_int[::2] & mask_int[1::2] # 转回字符串数组 mask_1 = np.vectorize(chr)(mask_int)
内容的提问来源于stack exchange,提问作者luiz_iniciante
相关产品推荐
相关产品推荐

