Python 3中是否有一个布尔值为True或False的数组?另外,这个数组会比字节数组更高效吗?
我需要能够将值从True更改为False并通过索引访问它;但我不需要能够改变阵列的大小。
编辑:另外,如果移动命令比索引更快,那么这也很好
答案 0 :(得分:1)
通常,最好支付每个值而不是一点使用字节的费用,并且为此可以使用bytearray
(内置2.6以来):
a = bytearray(100) # 100 values all initialized to 0/False
# or initially true:
b = bytearray(b'\x01' * 100) # 100 values all initialized to 1/True
# While you'll get 0 and 1 back, True and False can be assigned to it
a[1] = True
b[1] = False
这通常是最好的选择,因为在大多数情况下使用字节寻址更有效,除非它会导致数据从RAM溢出到交换文件。
如果你确实需要大量标志的空间,你需要一个优化的第三方包来获得每个值一位,例如: bitarray
(最大速度的C扩展,但出于多种目的仍然慢于bytearray
)或bitvector
或bitstring
(纯Python,以尽量减少编译复杂性,有时还提供额外的功能更容易,但在没有内存限制的情况下可靠地慢于bytearray
。
答案 1 :(得分:0)
如何使用数组?
import array
a = array.array("B", [0]*10) #fix size of 10 - all False
a[1] = 1 # Mutable, Yay!
print(a)
它将使用最少的内存,并为您提供O(1)索引