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 )
这是我的代码,但是我希望它以指定的长度打印单词的数量,而是打印单词本身。有什么建议吗?
答案 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 < 5
,len == 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
必须是布尔值(因为True
为1
,而False
为0
,因此它总结为{{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