我在这里有这个代码:它接受用户输入并将其添加到列表中,直到它们输入停止。此时,它会根据长度对列表项进行排序。
我要做的是将用户输入的每个单词放入具有相同长度的单词列表中。就像将2个字母的单词放入一个列表中一样,将3个字母的单词放入另一个列表中。
完成后,我尝试返回一个包含所有已创建的单词列表的列表。
到目前为止,我所取得的成就是组织它们,然后将它们添加到另一个列表中,该列表输入的列表与输入的单词一样多。
def wordsList():
stop = "stop"
sentence = []
sentence2 = []
while True:
word = input("Enter a word: ")
if word == stop:
# exit the loop
break
sentence.append(word)
sentence.sort(key=len)
cat= len(sentence)
for sublist in sentence:
sentence.append(sentence)
# sublist.insert(sentence)
# sentence2=[sentence]
# print(" ".join(sentence)) # Goes through the list and finds a smaller word and convert the list of words into a single string, each word separated by a space.
print(sentence)
wordsList()
答案 0 :(得分:2)
欢迎使用StackOverflow,
我建议使用字典,其中键是单词的长度,值是具有该长度的单词列表。这是一个潜在的实施:
import collections
STOP = "stop"
def wordsList():
words = collections.defaultdict(list)
while True:
word = input("Enter a word: ")
if word == STOP:
break
length = len(word)
words[length].append(word)
return list(words.values())
答案 1 :(得分:0)
这是itertools.groupby
的用途。首先,您需要一个获取一个单词长度的函数,该函数内置为len
。然后,您可以使用该键功能进行排序,并使用它进行分组。
import itertools
some_lst = [...] # user list of various length words
some_lst.sort(key=len)
groups = itertools.groupby(some_lst, key=len)
这将groups
构建为元组列表。每个元组都有格式:
(len(words), words_with_that_len)
你只对每个元组的第二个元素感兴趣,所以把它拉出来。
result = [list(sublst) for _, sublst in groups]
您也可以使用collections.defaultdict
import collections
result_dict = collections.defaultdict(list)
for word in some_lst:
result_dict[len(word)].append(word)
result_dict
现在是列表字典。要获得已排序的列表列表,您可以通过sorted
和dict.items
result = [v for _,v in sorted(result_dict.items())]