返回字符串列表中的X + 1项

时间:2013-11-01 17:50:38

标签: python string python-2.7 indexing

到目前为止,我有一个创建格雷码的函数,然后我需要创建一个函数,它将返回格雷码“加一”,基本上是顺序的下一个。所以如果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条目

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

我听说过这件事:

>>> 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函数。