Python识别字符串集中的后缀

时间:2015-04-23 19:29:41

标签: python tuples itertools suffix-array

CheckIO上进行练习,我想知道为什么这不会奏效。给定一组字符串,如果任何字符串是集合中任何其他字符串的后缀,我试图返回True。否则就错了。使用itertools我首先在元组中生成必要的排列。然后对于每个元组(每个i),如果第二个元组在第一个元组(option1)的末尾,我想看到困难的方法。另一方面是使用.endwith函数(option2),但两者都不适用于我。为什么这两个选项存在缺陷?

import itertools

def checkio(words_set):
    for i in itertools.permutations(words_set, 2):
    #option1 ---- if i[1] in i[0][-len(i[1]):]:
    #option2 ---- if i[0].endswith(i[1]):
            return True
        else:
            return False

的示例:

checkio({"hello", "lo", "he"}) == True

checkio({"hello", "la", "hellow", "cow"}) == False

我知道这可以作为答案。但只是想知道为什么我的原始方法不会采取。

def checkio(words_set):
    for w1 in words_set:
        for w2 in words_set:
           if w1.endswith(w2) and w1 != w2:
               return True
    return False

3 个答案:

答案 0 :(得分:1)

您的return False应该在for循环的末尾,否则该函数将在每次第一次比较时返回True / False,并忽略所有后续比较:

import itertools

def checkio(words_set):
    for i in itertools.permutations(words_set, 2):
        if i[0].endswith(i[1]):
            return True

    return False

答案 1 :(得分:0)

这是因为您在第一次检查后立即angular.module('mtApp').factory('getKey', function($http, $q) { var getData= function(data) { var key=''; var url = '../php/key_gen.php'; var returned = $http.post(url, data); return $q.all(returned); }; var getKey = { getData: getData }; return getKey; }); $scope.key = 'ok'; getKey.getData(someData).then(function (response, status, headers, config) { console.log(response.data.GeneratedKey); }); 。如果失败,它将返回return False您需要将其从False循环中删除!

但是作为一种更加pythonic的方式,您可以在for函数中使用combinations和生成器表达式:

any

答案 2 :(得分:0)

由于这是一个练习,我不会给你完整的答案,但你确定你真的想在if(pingServer("http://yousite.com")){echo "I'm up";}else{echo "I'm down";} 条款中return False吗?