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