Python 在基于字长的列表中创建子集列表
我这里有一个代码:它接受用户输入并将其添加到列表中,直到他们停止输入。此时,它将根据长度对列表项进行排序 我想做的是将用户输入的每个单词放入一个长度相同的单词列表中。就像两个字母的单词放在一个列表中一样,三个字母的单词放在另一个列表中 完成后,我将尝试返回一个列表,其中包含创建的所有单个单词列表 到目前为止,我所做的只是将它们组织起来,然后将它们添加到另一个列表中,该列表输出的次数与word输入的次数相同Python 在基于字长的列表中创建子集列表,python,python-3.x,function,Python,Python 3.x,Function,我这里有一个代码:它接受用户输入并将其添加到列表中,直到他们停止输入。此时,它将根据长度对列表项进行排序 我想做的是将用户输入的每个单词放入一个长度相同的单词列表中。就像两个字母的单词放在一个列表中一样,三个字母的单词放在另一个列表中 完成后,我将尝试返回一个列表,其中包含创建的所有单个单词列表 到目前为止,我所做的只是将它们组织起来,然后将它们添加到另一个列表中,该列表输出的次数与word输入的次数相同 def wordsList(): stop = "stop" sente
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()
这就是
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)
这将组
构建到元组列表中。每个元组具有以下格式:
(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\u dict
现在是列表字典。要获得列表的排序列表,您可以使用sorted
和dict.items
result = [v for _,v in sorted(result_dict.items())]
这就是
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)
这将组
构建到元组列表中。每个元组具有以下格式:
(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\u dict
现在是列表字典。要获得列表的排序列表,您可以使用sorted
和dict.items
result = [v for _,v in sorted(result_dict.items())]
欢迎来到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())
欢迎来到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())
您需要在此处修复缩进,此代码不可能以书面形式运行,并且不清楚某些代码是否属于
while
循环的一部分(从句子开始。排序不应该是,但不清楚这是否是您的问题的一部分)。处理子列表的成本完全不清楚;似乎您认为sort
适合您分组?提示:它不是,尽管itertools.groupby
可以做到这一点(或者您跳过sort
和groupby
并使用collections.defaultdict(list)
直接累加和分组)。不管怎样,这都不是一个好主意;请提供输入/输出示例。您需要在此处修复缩进,此代码不可能以书面形式运行,并且不清楚某些代码是否属于while
循环的一部分(从句子开始。排序
不应该是,但不清楚这是否是您的问题的一部分)。处理子列表的成本完全不清楚;似乎您认为sort
适合您分组?提示:它不是,尽管itertools.groupby
可以做到这一点(或者您跳过sort
和groupby
并使用collections.defaultdict(list)
直接累加和分组)。不管怎样,这都不是一个好主意;请提供输入/输出示例。您需要在最终列表comp中使用列表(sublst)
,或者结果将是大部分空生成器的列表;每次groups
前进时,以前返回的生成器都会失效。您需要在最终列表comp中使用list(sublst)
,否则result
将是大部分空生成器的列表;每次groups
前进时,以前返回的生成器都会失效。创建的字典在哪里?创建的字典在哪里?