[英]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.