列出了python 2和3之间的区别

时间:2018-04-03 12:04:26

标签: python python-3.x python-2.7

我需要将脚本从python 3移植到python 2,脚本只需要一个单词并生成所有可能的单词分段并返回最可能的单词。当生成分段python2和python3的候选者时给出非常不同的结果。这是我正在使用的代码:

def splits(text, start=0, s=20):
    """Return a list of all (first, rest) pairs; start <= len(first) <= L."""
     return [(text[:i], text[i:])
            for i in range(start, min(len(text), s)+1)]

def __segment__(self, text):
    """Return a list of words that is the most probable segmentation of text."""
    if not text:
        return []
    else:
        candidates = [[first] + self.__segment__(rest)
                      for (first, rest) in splits(text, 1)]
        print(candidates)
        return max(candidates, key=self.p_words)

在打印候选人时,我得到了这个答案,我试图分割的单词是“casadecampo”,结果应该是&#39; casa de campo&#39;:

Python2

[[u'o']]
[[u'p', u'o'], [u'po']]
[[u'm', u'p', u'o'], [u'mp', u'o'], [u'mpo']]
[[u'a', u'm', u'p', u'o'], [u'am', u'p', u'o'], [u'amp', u'o'], [u'ampo']]
[[u'c', u'a', u'm', u'p', u'o'], [u'ca', u'm', u'p', u'o'], [u'cam', u'p', u'o'], [u'camp', u'o'], [u'campo']]
[[u'e', u'c', u'a', u'm', u'p', u'o'], [u'ec', u'a', u'm', u'p', u'o'], [u'eca', u'm', u'p', u'o'], [u'ecam', u'p', u'o'], [u'ecamp', u'o'], [u'ecampo']]
[[u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'de', u'c', u'a', u'm', u'p', u'o'], [u'dec', u'a', u'm', u'p', u'o'], [u'deca', u'm', u'p', u'o'], [u'decam', u'p', u'o'], [u'decamp', u'o'], [u'decampo']]
[[u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'ad', u'e', u'c', u'a', u'm', u'p', u'o'], [u'ade', u'c', u'a', u'm', u'p', u'o'], [u'adec', u'a', u'm', u'p', u'o'], [u'adeca', u'm', u'p', u'o'], [u'adecam', u'p', u'o'], [u'adecamp', u'o'], [u'adecampo']]
[[u's', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'sa', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'sad', u'e', u'c', u'a', u'm', u'p', u'o'], [u'sade', u'c', u'a', u'm', u'p', u'o'], [u'sadec', u'a', u'm', u'p', u'o'], [u'sadeca', u'm', u'p', u'o'], [u'sadecam', u'p', u'o'], [u'sadecamp', u'o'], [u'sadecampo']]
[[u'a', u's', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'as', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'asa', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'asad', u'e', u'c', u'a', u'm', u'p', u'o'], [u'asade', u'c', u'a', u'm', u'p', u'o'], [u'asadec', u'a', u'm', u'p', u'o'], [u'asadeca', u'm', u'p', u'o'], [u'asadecam', u'p', u'o'], [u'asadecamp', u'o'], [u'asadecampo']]
[[u'c', u'a', u's', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'ca', u's', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'cas', u'a', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'casa', u'd', u'e', u'c', u'a', u'm', u'p', u'o'], [u'casad', u'e', u'c', u'a', u'm', u'p', u'o'], [u'casade', u'c', u'a', u'm', u'p', u'o'], [u'casadec', u'a', u'm', u'p', u'o'], [u'casadeca', u'm', u'p', u'o'], [u'casadecam', u'p', u'o'], [u'casadecamp', u'o'], [u'casadecampo']]

我得到的解决方案是&#39; c a s a d e c a m p o&#39;

Python3

[['o']]
[['p', 'o'], ['po']]
[['m', 'po'], ['mp', 'o'], ['mpo']]
[['a', 'mp', 'o'], ['am', 'po'], ['amp', 'o'], ['ampo']]
[['c', 'amp', 'o'], ['ca', 'mp', 'o'], ['cam', 'po'], ['camp', 'o'], ['campo']]
[['e', 'campo'], ['ec', 'amp', 'o'], ['eca', 'mp', 'o'], ['ecam', 'po'], ['ecamp', 'o'], ['ecampo']]
[['d', 'e', 'campo'], ['de', 'campo'], ['dec', 'amp', 'o'], ['deca', 'mp', 'o'], ['decam', 'po'], ['decamp', 'o'], ['decampo']]
[['a', 'de', 'campo'], ['ad', 'e', 'campo'], ['ade', 'campo'], ['adec', 'amp', 'o'], ['adeca', 'mp', 'o'], ['adecam', 'po'], ['adecamp', 'o'], ['adecampo']]
[['s', 'a', 'de', 'campo'], ['sa', 'de', 'campo'], ['sad', 'e', 'campo'], ['sade', 'campo'], ['sadec', 'amp', 'o'], ['sadeca', 'mp', 'o'], ['sadecam', 'po'], ['sadecamp', 'o'], ['sadecampo']]
[['a', 'sade', 'campo'], ['as', 'a', 'de', 'campo'], ['asa', 'de', 'campo'], ['asad', 'e', 'campo'], ['asade', 'campo'], ['asadec', 'amp', 'o'], ['asadeca', 'mp', 'o'], ['asadecam', 'po'], ['asadecamp', 'o'], ['asadecampo']]
[['c', 'as', 'a', 'de', 'campo'], ['ca', 'sade', 'campo'], ['cas', 'a', 'de', 'campo'], ['casa', 'de', 'campo'], ['casad', 'e', 'campo'], ['casade', 'campo'], ['casadec', 'amp', 'o'], ['casadeca', 'mp', 'o'], ['casadecam', 'po'], ['casadecamp', 'o'], ['casadecampo']]

这个问题的解决方案是&#39; casa de campo&#39;。

为什么我会为python 2和3获得不同的解决方案?

编辑:添加&#34;分裂&#34;功能

1 个答案:

答案 0 :(得分:1)

我发现了问题,它必须是python2中的整数除法,它考虑了所有的概率0,因为我做了int / int。将代码更改为float / int。