在python中创建一个列表列表,其中包含单词的长度和计数

时间:2017-09-26 01:30:52

标签: python

我有一个家庭作业,我必须定义一个函数,询问用户一个段落并创建一个列表列表(ex [[x,y],[x1,y2],[x3,y3]),其中x =字符串中单词的指定长度,y =指定长度的单词的计数。 (例如[[1,2],[2,3],[4,4],[6,1]] ... 1是1个字母的单词,2是1个字母单词的计数,所以类推。)

这就是我目前的情况:

def wordCount():
   words = []
   wordCount_text_length = []
   word_count = []

   text = input('Please enter a paragaph of regular English text: \n')
   words = (text.split())

   for x in words:
       wordCount_text_length.append(len(x))

   for y in wordCount_text_length:
       word_count.append(wordCount_text_length.count(y))

当我在控制台中运行并使用短语"我看到一只蓝鸟。"打印以下内容(变量供参考):

words = ['I', 'saw', 'a', 'blue', 'bird.']
wordCount_text_length = [1, 3, 1, 4, 4]
word_count = [2, 1, 2, 2, 2]

我被卡住了因为1.)它将标点符号作为字符串的一部分。 2.)如何创建一个循环来创建列表列表,该列表将采用单词长度/计数一次,然后继续下一个长度?

2 个答案:

答案 0 :(得分:0)

您可以使用.isalpha()过滤掉标点符号:

text = input('Please enter a paragaph of regular English text: \n').split()
new_text = [''.join(b for b in i if b.isalpha()) for i in text]
final_list = [[len(i), ''.join(new_text).count(i.lower())] for i in new_text]

使用&#34的输入;我看到一只蓝鸟。",最终输出是:

[[1, 1], [3, 1], [1, 2], [4, 1], [4, 1]]

您还可以使用字典来帮助可视化输出:

final_list = {i.lower():[len(i), ''.join(new_text).count(i.lower())] for i in new_text}

输出:

{'i': [1, 1], 'saw': [3, 1], 'a': [1, 2], 'blue': [4, 1], 'bird': [4, 1]}

答案 1 :(得分:0)

我使用了一个字典,然后在最后把它变成一个列表。我还使用.isalpha()检查了标点符号。如果您希望对最终列表进行排序,则在最后一行sorted(word_lengths.items())

words = input().split()
word_lengths = {}
puncs = [',', '.']
for word in words:
    y = word
    if not y.isalpha(): y = y[:-1]
    length = len(y)
    try: word_lengths[length] += 1
    except KeyError: word_lengths[length] = 1
print([[k, v] for k, v in word_lengths.items()])