문제

문자열의 문자열과 숫자를 사용하는 프로그램을 작성하고 원래 문자열의 해밍 거리 내의 모든 문자열을 출력합니다.나는 모든 것을하는 함수를 가지고 있지만 출력에는 목록 내에 목록이 있습니다.나는 이것이 왜 이것이 재귀적이고 때로는 가능한 값 목록을 반환 할 수있는 이유를 이해합니다.

문제는 그것을 변경하는 방법을 모르므로 완전한 문자열을 출력합니다.예를 들어 "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
.

도움이 되었습니까?

해결책

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
.

다른 팁

기본 케이스의 [num]를 기밀 한 경우 num를 반환하여 고정 할 수 있으며 일반 경우는 mapextend가 아닌 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']
>>> 
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top