0

バイナリ コードの文字列と数値を受け取り、元の文字列のハミング距離内にあるすべての文字列を出力するプログラムを作成することになっています。私はすべてを行う関数を持っていますが、出力にはリスト内のリストがあります。これがなぜなのか理解しています - 関数は再帰的であり、可能な値のリストを返すことがあります。

問題は、完全な文字列を出力するように変更する方法がわからないことです。たとえば、文字列が "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
4

2 に答える 2

0

[num]基本ケースではなくそれを返すことで修正でき、一般的なケースでは、ではなくandnumを使用して再帰呼び出しの結果を結合します。mapextendappend

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']
>>> 
于 2014-02-27T15:08:09.710 に答える