将二进制数字设为“对面”#39;在python中

时间:2017-02-06 22:34:03

标签: python binary

尝试获取二进制数字列表,并显示他们的对立面,我将这个词放在引号中,因为我不确定它是否是描述内容的最佳方式我的意思是。

@available(iOS 10.0, *)
@IBAction func openURL(_ sender: Any) {
let openURL = URL(string: "https://www.facebook.com")
UIApplication.shared.open(openURL!, options: [:], completionHandler: nil)
}

我想制作一个能够显示这些数字相反的补充函数,如下所示:

board=[1,10,101]

基本上将0换成1,将1换成0.因为它们是整数,我无法遍历每个二进制数并手动更改值,我尝试使用两个恭维但是没有&从语义上做我试图做的事情。有谁知道如何做到这一点的功能,或者这个过程将被调用?谢谢!

4 个答案:

答案 0 :(得分:0)

您能将二进制数表示为字符串吗?然后你可以简单地执行以下操作:

opposite = { '0':'1', '1':'0'}
board=['1', '10', '101']
newboard = [''.join([opposite[c] for c in n]) for n in board]

答案 1 :(得分:0)

你不能真正将[0,01,010]存储在列表中,因为它只是变为[0,1,10]你可以使用字符串

def reverse_binary(input):
    reversed = []
    for x in [list(str(x)) for x in input]:
        reversed.append(''.join(['%s' % (int(x) ^ 1) for x in x]))
    return reversed


if __name__ == '__main__':
    print(reverse_binary([1, 10, 101]))

答案 2 :(得分:0)

你可以将所有的零交换为零,并将所有零交换为每个字符串中的零。为此,请对列表进行简单迭代,并为每个值创建一个交换1和0的新条目。为了执行交换,请替换' 1'使用从未使用过的值(例如' U'),分配' 0'到' 1'并指定临时值' U'到' 0'。

newboard = [a.replace('1','U').replace('0','1').replace('U','0') for a in board]

答案 3 :(得分:0)

我相信你所指的是补充数字;你试图翻转二进制数字的数字。自然要做的是使用XOR运算符。 请考虑以下代码:

get_bin = lambda x: format(x, 'b')
def Complement_binary(x):
    complemented = []
    for num in x:
        i = 1
        while i <= num:
            i = i << 1
        complemented.append(get_bin((i - 1) ^ num))
    return complemented

Complement_binary函数接收一个数字列表,并以字符串中的二进制表示形式返回数字列表(get_bin将数字转换为字符串中的二进制数字)。如果您不想要字符串,可以删除get_bin中的complemented.append(get_bin((i - 1) ^ num))功能。

get_bin函数的来源:@Martin Thoma的https://stackoverflow.com/a/21732313/6833761