繁体   English   中英

尝试使用列表理解、map 或 for 循环来实现 function

[英]Trying to implement a function with list comprehension, map or a for loop

我是 python 的新手,我一直在尝试实现 function 以将格雷码转换为二进制,如图所示。 伪代码 我试过用列表理解来做:

g = [''.join(choice('01') for _ in range(li)) for _ in range(nvar)]

b = [[g[j][i] if i == 0 else b[j][i-1] ^ int(g[j][i], 2) for i in range(li)] for j in range(nvar)]

使用 map:

b = list((map((lambda b: b[0][0] = g[0][0] if i == 0 else b[0][i] = int(b[0][i - 1], 2) ^ int(g[0][i], 2) for i in range(li)), g)))

还有一个 for 循环:

def grayToBinary(g, nvar, li):
b = []
for i in range(0, nvar):
    #b[i][0] = g[i][0]
    b[i][0].append(g[i][0])
    for j in range(1, li):
        b[i][j].append(int(b[i][j-1], 2) ^ int(g[i][j], 2))
return b

我知道这些都是错误的,但我找不到正确的答案。 这可以通过列表理解或 map 来完成吗?

提前致谢

我认为这是您想要实现的目标:

def grayToBinary(g, li):
    b = [0]*li
    b[0] = g[0]

    for i in range(1,li):
        b[i] = b[i-1] ^ g[i]

    return b

gray = [0,1,1]
binary = grayToBinary(gray, len(gray))
print("Gray Code =",gray,"Binary =",binary)

Output 看起来像这样:

Gray Code = [0, 1, 1] Binary = [0, 1, 0]

使用 keidakida 的例子:

>>> [*itertools.accumulate([0, 1, 1], operator.xor)]
[0, 1, 0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM