I\'m trying to take a binary number in string form and flip the 1\'s and 0\'s, that is, change all of the 1\'s in the string to 0\'s, and all of the 0\'s to 1\'s. I\'m new t
>>> ''.join('1' if x == '0' else '0' for x in '1000110')
'0111001'
The a for b in c
pattern is a generator expression, which produces a series of items based on a different series. In this case, the original series is the characters (since you can iterate over strings in Python, which gives you the characters that make up that string), and the new series is a set of characters with the 0's and 1's flipped.
'1' if x == '0' else '0'
is pretty straightforward - it gives us whichever of 1
or 0
isn't x
. We do this for each such x
in the original set of characters, and then join()
them all together (with an empty string ''
, a.k.a. nothing, in between each item), thus giving us a final string which is all of the opposite characters from the original, combined.
Along the lines of Amber, but using ASCII arithmetic (for no particular reason). This obviously isn't meant for production code.
''.join(chr(97 - ord(c)) for c in my_bit_string)
48 and 49 are the ASCII (and Unicode) values for '0' and '1' respectively. ord gives you the numeric value for a character, while chr does the reverse.
Another way to do it is with string.translate() and string.maketrans()
from string import maketrans
bitString = "10101010100011010"
flippedString = bitString.translate(maketrans("10","01"))