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

时间:2017-11-24 08:27:09

标签: python python-3.x list string-length

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

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']以及我想要的是返回一个字符串,其中单词的长度从最小的一个到最大的,并且在它们之间按字母顺序排列。我无法做到这一点......

  • 输出: [; 1 - >,[A,E] ,; 2 - >,[LA],; 3 - >,[ELA]]
  • 通缉输出:'[1-> [A,E]; 2-> [LA]; 3-> [ELA]]'

2 个答案:

答案 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]]

逐步分解算法如下 -

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