58 Stimmen

Verfügt Python über einen Bitfeldtyp?

Ich brauche eine kompakte Darstellung eines Arrays von Booleschen, hat Python eine eingebaute Bitfeld-Typ oder muss ich eine alternative Lösung zu finden?

5voto

JasonTrue Punkte 18756

Das BitVector-Paket könnte genau das Richtige für Sie sein. Es ist nicht in meine Python-Installation integriert, aber auf der Python-Website leicht zu finden.

https://pypi.python.org/pypi/BitVector für die aktuelle Version.

4voto

Jason Baker Punkte 180981

NumPy hat eine Array-Schnittstelle Modul, das Sie zur Erstellung eines Bitfelds verwenden können.

2voto

Antti Rasinen Punkte 9468

Wenn Ihr Bitfeld kurz ist, können Sie wahrscheinlich das Strukturmodul . Andernfalls würde ich eine Art von Wrapper um die das Array-Modul .

Außerdem enthält das Modul ctypes Bitfelder aber ich habe es selbst nie benutzt. Ausschluss der Öffentlichkeit .

2voto

Ich brauchte ein minimales, speichereffizientes Bitfeld ohne externe Abhängigkeiten, hier ist es:

import math

class Bitfield:
    def __init__(self, size):
        self.bytes = bytearray(math.ceil(size / 8))

    def __getitem__(self, idx):
        return self.bytes[idx // 8] >> (idx % 8) & 1

    def __setitem__(self, idx, value):
        mask = 1 << (idx % 8)
        if value:
            self.bytes[idx // 8] |= mask
        else:
            self.bytes[idx // 8] &= ~mask

使用する:

# if size is not a multiple of 8, actual size will be the next multiple of 8
bf = Bitfield(1000)
bf[432] # 0
bf[432] = 1
bf[432] # 1

1voto

greggo Punkte 2721

Wenn Sie ints (oder long ints) als Arrays von bools (oder als Sets von Integers) darstellen wollen, werfen Sie einen Blick auf http://sourceforge.net/projects/pybitop/files/

Es ermöglicht das Einfügen/Extrahieren von Bitfeldern in lange Ints; das Finden des höchst- oder niedrigstwertigen '1'-Bits; das Zählen aller 1en; Bit-Umkehrung; solche Dinge, die alle in reinem Python möglich sind, aber in C viel schneller.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X