簡體   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