如何将Python中BitVector的gf_divide结果quotient转为列表?
I'm using the BitVector library in Python to perform division on two bit vectors. Here's my code:
from BitVector import* mod = BitVector( bitstring='1011011' ) n = 6 a = BitVector( intVal = 9223372036854775809 ) quotient, remainder = a.gf_divide(mod, n) print(quotient) print(remainder)
The output I get is:
0000001011111100101010001100111101110101101001101100010010000111 0000
I want to convert quotient to a list, but quotient isn't a string type—running print(type(quotient)) returns <class 'BitVector.BitVector.BitVector'>, and list(quotient) doesn't work directly. How can I achieve this?
Answer
Great question! The BitVector object doesn't directly convert to a list with list() because it's a custom class, but there are a few straightforward ways to get the bits into a list format:
1. Convert to a bit string first (simplest method)
The BitVector class has a bitstring() method that returns the full string representation of the bits (including leading zeros, which matches the output you see). You can then convert this string directly to a list:
# Get the bit string from the BitVector quotient_str = quotient.bitstring() # Convert to a list of characters ('0'/'1') quotient_char_list = list(quotient_str) # If you need a list of integers (0/1) instead, use a list comprehension quotient_int_list = [int(bit) for bit in quotient_str]
2. Iterate using get_bit() (direct integer access)
If you want to work directly with integer values for each bit without converting to a string, use the get_bit() method. This method takes an index (starting from 0 for the leftmost bit) and returns 0 or 1:
# Create a list by iterating over each bit index quotient_int_list = [quotient.get_bit(i) for i in range(len(quotient))]
This is useful if you need to manipulate individual bits as integers right away.
3. Convert via integer value (for advanced use cases)
You can also extract the integer value of the BitVector with the int_val attribute, then convert that integer back to a binary string. Just note that bin() doesn't preserve leading zeros, so you'll need to pad the string to match the original length of the BitVector:
# Get the integer value of the quotient quotient_int = quotient.int_val # Convert to binary string (removes '0b' prefix) quotient_str = bin(quotient_int)[2:] # Pad with leading zeros to match the original BitVector length quotient_str = quotient_str.zfill(len(quotient)) # Convert to list quotient_list = list(quotient_str)
This method is helpful if you need to perform integer operations on the quotient first before converting to a list.
内容的提问来源于stack exchange,提问作者Shashank Ranjan

