我正在尝试构建一个函数,在不导入库/包的情况下获取python列表中的等值图计数。我可以使用单个字符串来完成此操作,但在列表格式中这样做很困难。
列表就像这样:
l =['please', 'find', 'isograms', 'if', 'you', 'can']
该函数应该返回数字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
的值(True
或False
值)。然后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