了解Python序列

hlswsv35  于 2023-01-22  发布在  Python
关注(0)|答案(2)|浏览(126)

我正在做一个hackerrank的例子,叫做翻转位,给定一个32位无符号整数的列表,翻转所有的位(1-〉0和0-〉1),并返回一个无符号整数的结果,正确的代码是:

def flippingBits(n):
    seq = format(n, '032b')
    return int(''.join(['0' if bit == '1' else '1' for bit in seq]), 2)

我不明白最后一行,''部分是做什么的?为什么结尾有一个,2?
我已经理解了大部分的代码,但需要帮助,在理解最后一部分。

frebpwbc

frebpwbc1#

.“”部分有什么作用
''表示一个空字符串,它将被用作分隔符以将集合元素连接成字符串(一些示例可以在here中找到)
为什么结尾有个,2?
来自int文档:

类整数(x=0)
类整数(x,基数=10)

返回由数字或字符串x构造的整数对象
在这种情况下,它会将以二进制格式提供的字符串(即以2为基数)解析为int。

lmyy7pcs

lmyy7pcs2#

我希望下面的解释能有所帮助:

def flippingBits(n):
  seq = format(n, '032b')  # change the format from base 10 to base 2 with 32bit size unsigned integer into string
  return int(''.join(['0' if bit == '1' else '1' for bit in seq]), 2)
# ['0' if bit == '1' else '1' for bit in seq]  => means: build a list of characters from "seq" string
# in which whenever there is 1 convert it to 0, and to 1 otherwise; then
# ''.join(char_list) => means: build string by joining characters in char_list
# without space between them ('' means empty delimiter); then
# int(num_string, 2) => convert num_string from string to integer in a base 2

请注意,您可以使用逐位运算进行位翻转,而无需来回转换为字符串。

def flippingBits(n):
  inverted_n = ~n    # flip all bits from 0 to 1, and 1 to 0
  return inverted_n+2**32  # because the number is a signed integer, the most significant bit should be flipped as well

相关问题