[英]Returning the X+1 item in a list of strings
到目前為止,我有一個創建格雷碼的函數,然后我需要創建一個函數,它將返回格雷碼“加一”,基本上是順序的下一個。 所以如果D =(0,0,1,1)我需要返回(0,0,1,0)
我有
def gray(x):
if x:
return ['0' + x[0]] + gray(x[1:]) + ['1' + x[0]]
else:
return []
def graycode(n):
if n:
return gray(graycode(n-1))
else:
return ['']
最后,
def GrayFinal(D):
z = ''.join(map(str,D))
str(z)
if z in graycode(len(D)):
return graycode(len(D))[z+1]
else:
return ['']
我無法弄清楚如何返回Zth + 1條目
如果我正確地解釋了你的問題,那么問題的核心與格雷碼完全沒有關系,而是與更一般的問題相關,“ 鑒於我希望在Python列表中找到一個元素,如何在之后檢索下一個元素那個? “
不幸的是,我現在只能提出一個相當大腦死亡的解決方案
def next_elem(elem, input_list):
index = input_list.index(elem)
return input_list[index + 1]
請注意,這絕對不支持錯誤檢查,我假設在您的情況下將在代碼正文中完成。 將其投入您的代碼將導致以下結果:
def GrayFinal(D):
z = ''.join(map(str,D))
try:
return next_elem(z, graycode(len(D)))
except ValueError:
# Doesn't look like z was ever in the Gray code generated
return ['']
except IndexError:
# The next element is beyond the last element of the array!
return next_elem('0' + z, graycode(len(D) + 1))
這里我聽說過:
>>> bin2gray = lambda x: (x >> 1) ^ x # create graycode
>>> for i in range(10):
print(bin(bin2gray(i))[2:].zfill(4))
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
>>> def gray2bin(g):
bits = list(map(int, bin(g)[2:]))
n = [0]
for bit in bits:
if not n[-1]:
n.append(bit)
else:
n.append(1 - bit)
return sum([n[i] << (-1 - i) for i in range(-len(n), 0)])
>>> def inc(g):
return bin2gray(gray2bin(g) + 1)
如果您希望使用字符串而不是整數,則需要調整inc函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.