Skip to main content
 首页 » 编程设计

Python之按长度打印单词

2025年05月04日15jyk

我有一个任务,我必须按长度打印句子中的单词。 例如:

Sentence: I like programming in python because it is very fun and simple. 
>>> I 
>>> in it is 
>>> fun and 
>>> like very 
>>> python simple 
>>> because 

如果没有重复:

Sentence: Nothing repeated here 
>>> here 
>>> Nothing 
>>> repeated 

到目前为止我已经得到了这个:

wordsSorted = sorted(sentence, key=len) 

按长度对单词进行排序,但我不知道如何从排序后的单词中获得正确的输出。任何帮助表示赞赏。我也知道需要字典,但我不确定。 提前致谢。

请您参考如下方法:

首先根据长度对单词进行排序,然后使用 itertools.groupby 对它们进行分组再谈长度:

>>> from itertools import groupby          
>>> s = 'I like programming in python because it is very fun and simple' 
>>> for _, g in groupby(sorted(s.split(), key=len), key=len): 
    print ' '.join(g) 
...      
I 
in it is 
fun and 
like very 
python simple 
because 
programming 

您也可以使用 dict 来完成:

>>> d = {} 
>>> for word in s.split(): 
    d.setdefault(len(word), []).append(word) 
...   

现在 d 包含:

>>> d 
{1: ['I'], 2: ['in', 'it', 'is'], 3: ['fun', 'and'], 4: ['like', 'very'], 6: ['python', 'simple'], 7: ['because'], 11: ['programming']} 

现在我们需要迭代排序的键并获取相关值:

>>> for _, v in sorted(d.items()): 
    print ' '.join(v) 
...      
I 
in it is 
fun and 
like very 
python simple 
because 
programming 

如果你想忽略标点符号,那么你可以使用 str.strip 和 string.punctuation 去除它们:

>>> from string import punctuation 
>>> s = 'I like programming in python. Because it is very fun and simple.' 
>>> sorted((word.strip(punctuation) for word in s.split()), key=len) 
['I', 'in', 'it', 'is', 'fun', 'and', 'like', 'very', 'python', 'simple', 'Because', 'programming']