在 Cython 的字符串中循环数据
Loop data in Cython's string
我有一个 string
数据类型变量 x
:
print(x)
>>> b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'
我正在做这个
cdef int data
for data in x:
print(data)
>>> 48
49
49
48
49
etc...
为什么 48
和 49
?是因为这个数据是bytes
因为c++的cdef string
吗?
我想要类似的东西
cdef int data
for data in x:
print(data)
>>> 0
1
1
0
1
etc...
我应该怎么做?顺便提一句。我想在我的代码中将此 0/1
转换为 False/True
的 list
(或 vector[bool]
)。如果可能的话...谢谢
正常情况下是这样的Python
for data in x:
final_list.append(bool(int(data)))
print(final_list)
>>> [False, True, True etc...] # 0 = False, 1 = True
我不太熟悉 Cython,但这是标准 Python 程序的字节对象的预期行为。 bytestring b'012'
有三个条目。第一个不是零字节;它是数字 0 的 ascii 码。与其他字节类似。
要使字节实际为 0 和 1,您可以这样做:
>>> a = b'0110'.replace(b'0', b'\x00').replace(b'1', b'\x01')
>>> a
b'\x00\x01\x01\x00'
>>> list(a)
[0, 1, 1, 0]
这是使用 \x00
和 \x01
对 0 和 1 的十六进制字节值进行转义的方法。
x 是字节格式。所以把它转换成字符串然后迭代
x= b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'
y=x.decode("utf-8")
for b in y:
print(b)
我有一个 string
数据类型变量 x
:
print(x)
>>> b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'
我正在做这个
cdef int data
for data in x:
print(data)
>>> 48
49
49
48
49
etc...
为什么 48
和 49
?是因为这个数据是bytes
因为c++的cdef string
吗?
我想要类似的东西
cdef int data
for data in x:
print(data)
>>> 0
1
1
0
1
etc...
我应该怎么做?顺便提一句。我想在我的代码中将此 0/1
转换为 False/True
的 list
(或 vector[bool]
)。如果可能的话...谢谢
正常情况下是这样的Python
for data in x:
final_list.append(bool(int(data)))
print(final_list)
>>> [False, True, True etc...] # 0 = False, 1 = True
我不太熟悉 Cython,但这是标准 Python 程序的字节对象的预期行为。 bytestring b'012'
有三个条目。第一个不是零字节;它是数字 0 的 ascii 码。与其他字节类似。
要使字节实际为 0 和 1,您可以这样做:
>>> a = b'0110'.replace(b'0', b'\x00').replace(b'1', b'\x01')
>>> a
b'\x00\x01\x01\x00'
>>> list(a)
[0, 1, 1, 0]
这是使用 \x00
和 \x01
对 0 和 1 的十六进制字节值进行转义的方法。
x 是字节格式。所以把它转换成字符串然后迭代
x= b'011010000110010101101100011011000110111100100000011101110110111101110010011011000110010000001010'
y=x.decode("utf-8")
for b in y:
print(b)