获取python列表中的等值线计数

时间:2017-05-26 02:05:50

标签: python function

我正在尝试构建一个函数,在不导入库/包的情况下获取python列表中的等值图计数。我可以使用单个字符串来完成此操作,但在列表格式中这样做很困难。

列表就像这样:

l =['please', 'find', 'isograms', 'if', 'you', 'can']

该函数应该返回数字4,因为4个字符串没有重复的字符。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

只需使用以下内容:

[len({}.fromkeys(x)) == len(x) for x in l].count(True)

[len(set(x)) == len(x) for x in l].count(True)
>>> l =['please', 'find', 'isograms', 'if', 'you', 'can']
>>> [len({}.fromkeys(x)) == len(x) for x in l].count(True)
4
>>> [len(set(x)) == len(x) for x in l].count(True)
4

这可以通过将每个字符串转换为字典来实现,这样可以消除重复,并检查长度是否等于原始长度。然后它计算列表中True值的数量。

答案 1 :(得分:0)

您在问题中说明您能够确定单个字符串是否是等值线图。我假设您已经拥有一个函数is_isogram(string),如果True是等值线,则返回string,否则返回False

如果是这样,试试这个:

count = sum(is_isogram(s) for s in l)

sum函数中的生成器表达式基本上只计算is_isogram中每个项目l的值(TrueFalse值)。然后sum函数隐式地将这些布尔值转换为它们的整数等值(即1的{​​{1}}和True的{​​{1}},并计算总和。由于列表中的每个等值线应该有一个0,因此总和应该等于等值线的数量。

如果您使用某种表达式来测试等值线(例如False)而不是函数,那么只需替换上述代码中的1,例如:

len(set(string)) == len(string)

答案 2 :(得分:0)

    len( [word for word in l if len(word) == len(set(word))] )

(部分len(word) == len(set(word))表示只包含不重复字符的单词,因为set(word)不包括重复字符。)

答案 3 :(得分:0)

这将起作用,尝试通过将通过所有隐藏的代码战测试

def is_isogram(string):
    string = string.lower()
    for char in string:
        if string.count(char) > 1:
            return False
    return True