将某些冗长的元素添加到列表中
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 一个字符串其中单词的长度从最小到最大,中间的单词按字母顺序排列。我做不到...
- 输出: [;1 ->, [A, E], ;2 ->, [LA], ;3 ->, [ELA]]
- 想要的输出:'[1->[A, E];2->[LA];3->[ELA]]'
最短解(使用纯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]]
逐步分解算法如下-
- 按长度对元素排序
- 按长度对连续元素进行分组
- 对于每个组,按字母顺序对子列表进行排序,然后将它们格式化为字符串
- 最后,将各组字符串连接起来,用方括号括起来
[]
我正在为我的学校做一个项目,现在我有以下代码:
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 一个字符串其中单词的长度从最小到最大,中间的单词按字母顺序排列。我做不到...
- 输出: [;1 ->, [A, E], ;2 ->, [LA], ;3 ->, [ELA]]
- 想要的输出:'[1->[A, E];2->[LA];3->[ELA]]'
最短解(使用纯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]]
逐步分解算法如下-
- 按长度对元素排序
- 按长度对连续元素进行分组
- 对于每个组,按字母顺序对子列表进行排序,然后将它们格式化为字符串
- 最后,将各组字符串连接起来,用方括号括起来
[]