Python 成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和

Python 成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和,python,string,parsing,python-2.7,string-parsing,Python,String,Parsing,Python 2.7,String Parsing,成为最后一个b,导致bbb添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用set()将删除重复项,但仍然fd和ef不应该出现在结果中。是的,顺序并不重要。使用set()将删除重复项,但仍然fd和ef不应出现在结果中。是的,订单不重要,顺便说一句,订单不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字


成为最后一个
b
,导致
bbb
添加“bbb”超出了您原来问题的范围。提供相关且广泛的测试用例似乎是您的职责。当然,但算法不是为特定的输入而设计的。我提供这些信息只是为了举例说明。然而,我的错误是,我没有在前面提到这一点。使用
set()
将删除重复项,但仍然
fd
ef
不应该出现在结果中。是的,顺序并不重要。使用
set()
将删除重复项,但仍然
fd
ef
不应出现在结果中。是的,订单不重要,顺便说一句,订单不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字符的形式解析字符串。我试图完成的解析是基于以下文章中给出的LZ解析算法:第6页提供了所需的信息顺序不是问题。您的解决方案给出了此输入的预期结果,但是如果输入发生更改,它将不起作用。您的解决方案总是以双字符的形式解析字符串。我试图完成的解析是基于以下论文中给出的LZ解析算法:第6页提供了所需的信息
input = "abbbbdeeefffddddb"

comparator = []

def parse(string):
    for pointer in range(len(string)-1):
        if string[pointer] not in comparator:
            comparator.append(string[pointer])

        else:
            substring = string[pointer] + string[pointer+1]
            comparator.append(substring)

        print comparator 

parse(input)
def parse(string):
    pointer = 0
    while pointer < len(string):
        if string[pointer] not in comparator:
            comparator.append(string[pointer])
        else:
            substring = string[pointer] + string[pointer+1]
            comparator.append(substring)
            pointer += 1
        pointer += 1
    print comparator
['a', 'b', 'bb', 'bd', 'e', 'ee', 'f', 'ff', 'd', 'dd', 'db']
def parse(string):
    result = set()
    letters = iter(string)
    for letter in letters:
        if letter not in result:
            result.add(letter)
        else:
            substring = letter + letters.next()
            result.add(substring)
    return list(result)
# same set, different order
['a', 'bd', 'b', 'e', 'd', 'bb', 'f', 'ee', 'dd', 'db', 'ff'] 
$ cat single-seen-double
#!/usr/bin/python3

def single_seen_double(string):
    length = len(string)
    index = 0
    seen = set()
    while index < length:
        if string[index] in seen and index < length - 1:
            yield string[index:index+2]
            index += 2
        else:
            seen.add(string[index])
            yield string[index]
            index += 1

def main():
    print(list(single_seen_double("abbbbdeeefffddddb")))

main()

zareason-dstromberg:~/src/outside-questions/single-seen-double x86_64-pc-linux-gnu 5871 - above cmd done 2013 Tue Nov 05 01:48 PM

$ ./single-seen-double
['a', 'b', 'bb', 'bd', 'e', 'ee', 'f', 'ff', 'd', 'dd', 'db']