将某些冗长的元素添加到列表中

Adding certain lengthy elements to a list

我正在为我的学校做一个项目,现在我有以下代码:

def conjunto_palavras_para_cadeia1(conjunto):
acc = []
conjunto = sorted(conjunto, key=lambda x: (len(x), x))

def by_size(words, size):
    result = []
    for word in words:
        if len(word) == size:
            result.append(word)
    return result

for i in range(0, len(conjunto)):
    if i > 0:
        acc.append(("{} ->".format(i)))
        acc.append(by_size(conjunto, i))

acc = ('[%s]' % ', '.join(map(str, acc)))
print( acc.replace(",", "") and acc.replace("'", "") )


conjunto_palavras_para_cadeia1(c)

我有这个列表:c = ['A', 'E', 'LA', 'ELA'] 我想要的是 return 一个字符串其中单词的长度从最小到最大,中间的单词按字母顺序排列。我做不到...

最短解(使用纯python):

c = ['A', 'E', 'LA', 'ELA']

result = {}

for item in c:
  result[len(item)] = [item] if len(item) not in result else result[len(item)] + [item]

str_result = ', '.join(['{0} -> {1}'.format(res, sorted(result[res])) for res in result])

我来解释一下:
我们正在循环中一件一件地获取项目。我们通过生成带有单词长度索引的列表将它们添加到字典中。

我们的结果是:

{1: ['A', 'E'], 2: ['LA'], 3: ['ELA']}

在str_result中:

1 -> ['A', 'E'], 2 -> ['LA'], 3 -> ['ELA']

如有问题请问

查看您的程序,唯一的问题似乎是在格式化输出以供显示时。请注意,您可以使用 str.format 将列表插入字符串,如下所示:

'{}->{}'.format(i, sublist)

这是我解决你的问题的方法,使用 sorted + itertools.groupby

from itertools import groupby

r = []
for i, g in groupby(sorted(c, key=len), key=len):
    r.append('{}->{}'.format(i, sorted(g)).replace("'", ''))

print('[{}]'.format(';'.join(r)))
[1->[A, E];2->[LA];3->[ELA]]

逐步分解算法如下-

  • 按长度对元素排序
  • 按长度对连续元素进行分组
  • 对于每个组,按字母顺序对子列表进行排序,然后将它们格式化为字符串
  • 最后,将各组字符串连接起来,用方括号括起来[]