关于遍历Python3中的单个字节和python遍历每一个字符的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于python3中的快速异或字节、Python:将字符串拆分为单个字母所组成的列
关于遍历Python 3中的单个字节和python遍历每一个字符的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于python 3中的快速异或字节、Python : 将字符串拆分为单个字母所组成的列表并合并单个字母、python – 方法中的单个字符串或字符串列表、python-3.x – 如何在Python3中打印()一个字符串,没有例外?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 遍历Python 3中的单个字节(python遍历每一个字符)
- python 3中的快速异或字节
- Python : 将字符串拆分为单个字母所组成的列表并合并单个字母
- python – 方法中的单个字符串或字符串列表
- python-3.x – 如何在Python3中打印()一个字符串,没有例外?
遍历Python 3中的单个字节(python遍历每一个字符)
bytes
在Python 3中遍历一个对象时,将单个对象获取bytes
为ints
:
>>> [b for b in b''123''][49, 50, 51]
如何获取1个长度的bytes
对象呢?
以下是可能的,但对读者来说不是很明显,并且很可能表现不佳:
>>> [bytes([b]) for b in b''123''][b''1'', b''2'', b''3'']
答案1
小编典典如果您担心此代码的性能,并且int
a字节不适合您的情况,那么您可能应该重新考虑使用的数据结构,例如使用str
对象代替。
您可以对bytes
对象进行切片以获得1个长度的bytes
对象:
L = [bytes_obj[i:i+1] for i in range(len(bytes_obj))]
有PEP
0467-针对二进制序列的次要API改进,提出了以下bytes.iterbytes()
方法:
>>> list(b''123''.iterbytes())[b''1'', b''2'', b''3'']
python 3中的快速异或字节
我需要异或2个字节的对象。我使用以下代码:
def bxor(b1, b2): # use xor for bytes result = b"" for b1, b2 in zip(b1, b2): result += bytes([b1 ^ b2]) return result
当字节对象较小时,它可以正常工作,但是如果对大型对象(几个MB)进行异或运算,则将花费很长时间(几个小时)。我怎样才能使其更快?
答案1
小编典典当bytes
对每个具有一百万个元素的对象进行XOR运算时,此循环将创建大约一百万个临时bytes
对象,并将 每个 字节平均从一个临时对象复制到下
一个
字节大约50万次bytes
。请注意,字符串存在完全相同的问题(也存在许多其他语言)。弦乐解决方案是创建弦乐部件列表,并''''.join
在最后使用它来有效地连接它们。您可以对字节执行相同的操作:
def bxor(b1, b2): # use xor for bytes parts = [] for b1, b2 in zip(b1, b2): parts.append(bytes([b1 ^ b2])) return b''''.join(parts)
或者,您可以使用bytearray
可变的a ,因此可以避免此问题。它还允许您不必bytes
在每次迭代中分配新对象,您只需追加byte
/即可int
。
def bxor(b1, b2): # use xor for bytes result = bytearray() for b1, b2 in zip(b1, b2): result.append(b1 ^ b2) return result
return bytes(result)
如果您想要/需要一个bytes
对象,也可以选择。
Python : 将字符串拆分为单个字母所组成的列表并合并单个字母
字符串拆分成由单个字母组成的列表:
string="asdasd"
print(list(string))
输出:
[''a'', ''s'', ''d'', ''a'', ''s'', ''d'']
将单个字母组成的列表进行合并:
string="asdasd"
print(list(string))
string_two=list(string)
print("".join(string_two))
输出:
[''a'', ''s'', ''d'', ''a'', ''s'', ''d'']
asdasd
得解。
python – 方法中的单个字符串或字符串列表
def test(a,b): x = [] x.extend(a) x.extend(b) return x x = [1,2,3,4]
我不想发生什么事情
test(x,'test') [1,4,'t','e','s','t']
我必须诉诸一个奇怪的语法:
test(x,['list'])
我想让这些工作隐含地工作:
test(x,'list') [1,'test'] test(x,['one','two','three']) [1,'one','three']
我真的觉得有一个“pythonic”的方式来做这个或涉及鸭打字的东西,但我看不到它.我知道我可以使用isinstance()来检查它是否是一个字符串,但我觉得有更好的方法.
编辑:我使用的是python 2.4.3
解决方法
>>> def a(*args): ... x=[] ... for i in args: ... if '__iter__' in dir(i): ... x+=list(i) ... else: ... x.append(i) ... return x ... >>> a(1,4) [1,4] >>> a(1,[3,4]) [1,4],'123') [1,'123'] >>> a(1,'123',1231,(1,4)) [1,1,4]
python-3.x – 如何在Python3中打印()一个字符串,没有例外?
print(my_string)
但这不起作用.根据my_string的内容,环境变量和您使用的操作系统将引发UnicodeEncodeError异常:
>>> print("\u3423") Traceback (most recent call last): File "<stdin>",line 1,in <module> UnicodeEncodeError: ''ascii'' codec can''t encode character ''\u3423'' in position 0: ordinal not in range(128)
是否有一种干净的便携方式来解决这个问题?
扩展一点:这里的问题是python3字符串包含Unicode编码字符,而终端可以有任何编码.如果你很幸运,你的终端可以处理字符串中包含的所有字符,一切都会好的,如果你的终端不能(例如有人设置LANG = C),那么你得到一个例外.
如果在python3中手动编码字符串,则可以提供忽略或替换不可编码字符的错误处理程序:
"\u3423".encode("ascii",errors="replace")
对于print()我没有看到插入错误处理程序的简单方法,即使有,一个简单的错误处理程序似乎是一个可怕的想法,因为它会修改数据.一个条件错误处理程序可能会工作(即检查isatty()并根据该做什么来决定),但是看起来非常麻烦只是为了打印()一个字符串,我甚至不确定它会不会在某些情况下失败.
一个现实世界的例子,这个问题就是这个例子:
Python3: UnicodeEncodeError only when run from crontab
解决方法
Is there a clean portable way to fix this?
设置PYTHONIOENCODING =< encoding>:< error_handler>例如.,
$PYTHONIOENCODING=utf-8 python your_script.py >output-in-utf-8.txt
在您的情况下,我将您的环境(LANG,LC_CTYPE)配置为接受非ascii输入:
$locale charmap
我们今天的关于遍历Python 3中的单个字节和python遍历每一个字符的分享就到这里,谢谢您的阅读,如果想了解更多关于python 3中的快速异或字节、Python : 将字符串拆分为单个字母所组成的列表并合并单个字母、python – 方法中的单个字符串或字符串列表、python-3.x – 如何在Python3中打印()一个字符串,没有例外?的相关信息,可以在本站进行搜索。
本文标签: