Python 在基于字长的列表中创建子集列表

Python 在基于字长的列表中创建子集列表,python,python-3.x,function,Python,Python 3.x,Function,我这里有一个代码:它接受用户输入并将其添加到列表中,直到他们停止输入。此时,它将根据长度对列表项进行排序 我想做的是将用户输入的每个单词放入一个长度相同的单词列表中。就像两个字母的单词放在一个列表中一样,三个字母的单词放在另一个列表中 完成后,我将尝试返回一个列表,其中包含创建的所有单个单词列表 到目前为止,我所做的只是将它们组织起来,然后将它们添加到另一个列表中,该列表输出的次数与word输入的次数相同 def wordsList(): stop = "stop" sente

我这里有一个代码:它接受用户输入并将其添加到列表中,直到他们停止输入。此时,它将根据长度对列表项进行排序

我想做的是将用户输入的每个单词放入一个长度相同的单词列表中。就像两个字母的单词放在一个列表中一样,三个字母的单词放在另一个列表中

完成后,我将尝试返回一个列表,其中包含创建的所有单个单词列表

到目前为止,我所做的只是将它们组织起来,然后将它们添加到另一个列表中,该列表输出的次数与word输入的次数相同

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
前进时,以前返回的生成器都会失效。创建的字典在哪里?创建的字典在哪里?