2014-02-27 101 views
0

我應該寫一個程序,它的二進制代碼和數字的字符串,並輸出所有字符串的原始字符串的是漢明距離之內。我有一個可以完成所有任務的函數,但是在輸出中有列表中的列表。我明白爲什麼這是 - 函數是遞歸的,有時它會返回一個可能的值列表。追加一個列表和遞歸(海明距離) - Python的3

的問題是,我不知道該怎麼那麼它輸出完整的字符串改變它。例如,對於 「0000」 的字符串和漢明距離爲 「2」,我得到: [ 「1 [ '100', '010', '001']」,「01 ['10' , '01'] 」, 「001 [ '1']」]

但我想要的是:

1100 
1010 
1001 
0110 
0101 
0011 

代碼如下:

def hamming(num, dist): 
    if dist == 0: 
     return num 
    else: 
     outputlist = list() 
     for item in range(len(num)): 
      if len(num[item:]) > dist - 1: 
       if num[item] == "0": 
        restoflist = hamming(num[item + 1:], dist - 1) 
        outputlist.append(num[:item] + "1" + str(restoflist)) 
       else: 
        restoflist = hamming(num[item + 1:], dist - 1) 
        outputlist.append(num[:item] + "0" + str(restoflist))     
     return outputlist 

回答

0

如果您遍歷由hamming返回列表你應該能夠琴絃正確的方式追加在一起 ​​- 這樣的:

def hamming(num, dist): 
    if dist == 0: 
     return num 
    else: 
     outputlist = list() 
     for item in range(len(num)): 
      if len(num[item:]) > dist - 1: 
       if num[item] == "0": 
        restoflist = hamming(num[item + 1:], dist - 1) 
        if type(restoflist) is not str 
         for rest in restoflist: 
          outputlist.append(num[:item] + "1" + str(rest)) 
        else 
         outputlist.append(num[:item] + "1" + str(restoflist)) 
       else: 
        restoflist = hamming(num[item + 1:], dist - 1) 
        if type(restoflist) is not str 
         for rest in restoflist: 
          outputlist.append(num[:item] + "0" + str(rest)) 
        else 
         outputlist.append(num[:item] + "0" + str(restoflist))     
    return outputlist 
0

您可以通過在基本情況下返回[num]寧可num解決它,並且在一般情況下,使用map組合從遞歸調用的結果和extend而不是append

def hamming(num, dist): 
    if dist == 0: 
     return [num] 
    else: 
     outputlist = list() 
     for item in range(len(num)): 
      if len(num[item:]) > dist - 1: 
       if num[item] == "0": 
        restoflist = hamming(num[item + 1:], dist - 1) 
        outputlist.extend(map(lambda x: num[:item] + "1" + x, restoflist)) 
       else: 
        restoflist = hamming(num[item + 1:], dist - 1) 
        outputlist.extend(map(lambda x: num[:item] + "0" + x, restoflist))     
     return outputlist 

>>> hamming('0000', 2) 
['1100', '1010', '1001', '0110', '0101', '0011'] 
>>>