我正在为我的学校做一个项目,现在我有以下代码:
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']以及我想要的是返回一个字符串,其中单词的长度从最小的一个到最大的,并且在它们之间按字母顺序排列。我无法做到这一点......
答案 0 :(得分:1)
最短的解决方案(使用纯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']
如果您有任何疑问 - 请
答案 1 :(得分:1)
查看您的程序,唯一的问题似乎是您要格式化输出以进行显示。请注意,您可以使用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]]
逐步分解算法如下 -
[]