计算列表项的重复次数

时间:2017-11-27 21:29:23

标签: python list count

l = "Hello world is me"
words_ = l.split()
print(l.split())

for item in words_ :
    if len(item) < 5 :
        print('Words with length less than 6:', item )
    elif len(item) == 5 :
        print('Words with length 5:', item )

这是我的代码,但是我希望它以指定的长度打印单词的数量,而是打印单词本身。有什么建议吗?

4 个答案:

答案 0 :(得分:1)

你可以计算你的循环中的单词,但是通过对单词大小过滤的生成器理解来提供sum更加pythonic:

>>> l = "Hello world is me"
>>> sum(1 for w in l.split() if len(w)==5)
2

另一种变体是将测试结果转换为boolean(这里测试的结果是已经一个布尔值,因此不需要bool()),并总结:< / p>

sum(len(w)==5 for w in l.split())

它是测试一个条件的理想选择,但是如果你想一次计算符合几个条件(len < 5len == 5)的单词,那么经典循环仍然是最好的选择,因为它只在列表上迭代一次,你自然会使用if/elsif进行短路评估,这对于listcomps来说太糟糕了,但这就是生命:

less_than_5=exactly_5=0
for item in l.split() :
    if len(item) < 5 :
        less_than_5 += 1
    elif len(item) == 5 :
        exactly_5 += 1

答案 1 :(得分:1)

您可以使用以下方法计算满足条件的元素数量:

sum(condition for item in iterable)

请注意,此处的condition必须是布尔值(因为True1,而False0,因此它总结为{{1}因此,它会计算满足条件的次数。

因此,如果您想计算长度小于5 的元素数量,您可以写:

True

或者长度为5的单词数量:

number_of_words = sum(len(word) < 5 for word in words_)

答案 2 :(得分:1)

我首先构建Counter,然后很容易提取您想要的信息。

>>> from collections import Counter
>>> s = "Hello world is me"
>>> c = Counter(len(x) for x in s.split())
>>> c
Counter({2: 2, 5: 2})

或者,您可以使用

构建Counter
c = Counter(map(len, s.split()))

Counter告诉您,您的句子有两个长度为2的单词和两个长度为5的单词。

获取长度小于5的单词数:

>>> sum(num_words for length, num_words in c.items() if length < 5)
2

由于Counter默认情况下会在查找缺失的密钥时返回0,因此您可以通过发出

来获得相同的结果
>>> sum(c[length] for length in range(1, 5))
2

这可能比第一个选项更容易阅读。

获取长度为5的单词数量非常简单:

>>> c[5]
2

答案 3 :(得分:0)

你必须找到每个单词的长度,然后你可以根据单词的长度来计算它们。

使用range()max()sum() builtin functions会大大简化代码:

l = "Hello world is me"
words = l.split()
print(l.split())

# create a dict to count words with the same length
lengths = dict.fromkeys(
    range(1, max(len(word) for word in words) + 1),  # range's stop is exclusive
    0,  # default value
)

# count words' length
for word in words:
    lengths[len(word)] += 1

# count all words with length < 6
print(
    'Words with length less than 6:',
    sum(value for key, value in lengths.items() if key < 6)
)

# count all words with length == 5
print(
    'Words with length 5:',
    lengths.get(5, 0)  # faster than sum()
)

将打印:

['Hello', 'world', 'is', 'me']
Words with length less than 6: 4
Words with length 5: 2