我在python中实现了n维最长的公共子序列,但在3d中却存在问题。

# -*- coding: utf-8 -*-
from collections import defaultdict
from operator import itemgetter

def count(limits):
    idcs = [0] * len(limits)
    while True:
        yield tuple(idcs)
        for n in range(len(limits)-1, -1, -1):
            idcs[n] += 1
            if idcs[n] != limits[n]:
                break
            elif n == 0:
                raise StopIteration
            else:
                idcs[n] = 0

def make_grid(words):
    size = len(words)
    default_backpointer = tuple([-1]*size)
    grid = defaultdict(lambda: (0, default_backpointer))
    for indices in count([len(word) for word in words]):
        print(indices)
        chars = {L[ind] for L, ind in zip(words, indices)}
        if len(chars) == 1:
            backpointer = tuple([coord - 1 for coord in indices])
            grid[indices] = (grid[backpointer][0] + 1, backpointer, chars.pop())
        else:
            iter = count([2]*size)
            iter.next() # To avoid self-reference
            values = []
            for previous in iter:
                backpointer = tuple([indices[index] - previous[index] for index in xrange(size)])
                values.append((grid[backpointer][0], backpointer, None))
            grid[indices] = max(values, key=itemgetter(0))
    print(grid.keys())
    return grid

def lcs(*words):
    grid = make_grid(words)
    best = []
    position = tuple([len(word) - 1 for word in words])

    while -1 not in position:
        pointer = grid[position]
        best.append(pointer[2])
        position = pointer[1]

    best = [item for item in best if item is not None ]
    best.reverse()
    return best

#print(lcs("HUMAN", "CHIMPANZEE", "WOMAN"))
print(lcs("MAN", "MAFN", "FMAN"))

输出:['N']

===============>>#1 票数:0 已采纳

发现了错误。 max函数的itemgetter(0) ,因此返回指针错误。

  ask by Reactormonk translate from so

未解决问题?本站智能推荐:

2回复

尝试在python2中创建数字的finit序列:IndexError(初学者)

编辑:最初的问题现在已经解决,请看问题的底部; 我还有另一个问题。 我有一个列表s2 ,它的第一个元素( s[0] )是长度为n (由用户输入定义)的数字列表,并且其元素也由用户定义。 我想要做的是像s2其他元素一样创建n-1个数字序列。 这些序列中的每个序列都减去前一个序列中的顺序
5回复

如何在Python中实现调试控制台?

我见过几个提供调试控制台的Python IDE(例如PyDev Extensions,WingIDE) - 一个在断点所在方法的上下文中运行的交互式终端。 这使您可以打印成员,调用其他方法并查看结果,并重新定义方法以尝试修复错误。 凉。 谁能告诉我这是如何实现的? 我知道有代码模块,
1回复

logger调试python如何在现有代码中实现。 意见建议:)

我试图为此添加一些日志记录,以便如果选择了错误的配置等选项,则会记录此日志。 正在考虑添加以下内容: 不确定如何将其添加到我的def read_config中。 感谢大家。
1回复

DebuggerStepThrough在python中?

有没有办法在python中标记某个方法,以便调试器在调试时不会进入它? (我正在使用PyCharm,所以如果有一些特定的IDE可以帮助我,那也会很棒) 对于熟悉C#的人 - 我在python中寻找DebuggerStepThrough属性...
1回复

Python实现杆切割算法

我正在练习动态编程,也是python的新手。 当我在shell中尝试这个。 它警告我,p不是一个全局变量。 在timeit函数中p不是已经是全局变量吗?
3回复

从脚本里面实现与python -mpdb相同的任何方式?

除了将所有代码包装在try except ,是否有任何方法可以实现与运行脚本相同的功能,如python -mpdb script ? 我希望能够在发生异常时看到出了什么问题。
6回复

在Python中禁用断言

如何在Python中禁用断言? 也就是说,如果断言失败,我不希望它引发AssertionError ,而是继续前进。 我怎么做?
3回复

Python中的IndexError(入门)

我有一个数组X [1]。 在该数组中,我想用[....,10,..]替换元素[...,1,0,...]。 换句话说,无论1和0连续出现在何处,我都希望将其替换为10。 我的代码是 但是这段代码给了我错误: 如果我删除两个delete语句之一,它不会给我一个错误,它将从[
2回复

在python中调试代码

我正在编写一些代码来做到这一点:用0到9的数字填充数组,然后将小于5的数字放在末尾。 我的代码是这样的: 我的问题是,当我运行它时,如果我给出其他任何内容,它将忽略检查数字是否为0到9的循环,并将其传递给数组,并在第16行给我一个错误(a [i] = a [i + 1])。 提前致谢
4回复

在Python中查看变量

有没有办法在程序运行时查看python中所有变量的列表而不设置断点? 打印过于混乱,因为我有很多不断变化的变量。 谢谢