Python 计算变量类型列表中的字符串数,如果可能则不使用循环

Python count number of strings in a list of variable types, without loop if possible

想要计算变量类型列表中的字符串数,如果可能的话不使用循环:

l = [1,2,3,'a','b']
c = l.count(str)
print (c)

输出:

0

预期输出:

2

由于 Guido 不是 mapfilter 的忠实粉丝,我将给出一个避免它们的答案:

len([v for v in k if isinstance(v, str)])

这只计算字符串。这是浪费,因为它在内存中构建了一个完整的列表。没有办法清楚地获得生成器的长度,但是有 hack。

sum(isinstance(v, str) for v in k)

这是有效的,因为布尔值的总和是 True 值的数量,所以它是字符串的数量。感谢 vaultah 的评论进行澄清。

我的解决方案可能有点乏味,但这是我的尝试

l = [1,2,3,'a','b']

将列表的所有元素连接到一个字符串中

ll = ''.join(map(str,l))

然后数一数

letters = sum(c.isalpha() for c in ll)