python中是否有可变的二进制数组?

时间:2016-04-19 16:40:17

标签: arrays python-3.x mutable

Python 3中是否有一个布尔值为True或False的数组?另外,这个数组会比字节数组更高效吗?

我需要能够将值从True更改为False并通过索引访问它;但我不需要能够改变阵列的大小。

编辑:另外,如果移动命令比索引更快,那么这也很好

2 个答案:

答案 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)或bitvectorbitstring(纯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)索引