如何根据第一个元素对嵌套列表进行分组?

马修·K。

我有一个嵌套列表,其中包含要根据嵌套列表的第一个元素进行分组的字符串。将它们分组后,然后我要删除所有重复的第一个元素,并将列表转换为以分号分隔的简单字符串。

到目前为止,我所管理的是输出简单的字符串以及删除重复的第一个元素。为此,我将列表的第一个元素保存在一个新的空列表中,并使用if / else语句来确定要追加到新输出列表的内容。

exampleinput = ["[['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'], ['1','2','5'],['1','7','8']]"]

def makestring(n):
  str1 = ' '.join(n)
  return str1

def transform(n):
  first = []
  output = []
  for i in n:
    if i[0] not in first:
      output.append(makestring(i))
    else:
      string1 = makestring(i[1:])
      output.append(string1)
    first.append(i[0])
  return output

for i in exampleinput:
  print(transform(eval(i.strip())))

输入示例:

[['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']] 

所需的输出:

['1 2 3 ; 4 6 ; 2 5 ; 7 8', '2 1 2', ' 3 4 2']

实际输出:

['1 2 3', '4 6', '2 1 2', '3 4 2, '2 5', '7 8'] 

有什么想法吗?提前致谢!

罗曼·佩列赫雷斯特

具有itertools.groupby功能:

from itertools import groupby

inp_list = [['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
res = []
for k, g in groupby(sorted(inp_list, key=lambda x: x[0]), key=lambda x: x[0]):
    item1, *rest = g
    res.append('; '.join(map(' '.join, [item1] + [i[1:] for i in rest])) 
               if rest else ' '.join(item1))

print(res)

输出:

['1 2 3; 4 6; 2 5; 7 8', '2 1 2', '3 4 2']

仅使用辅助分组字典的奖励解决方案:

inp_list = [['1','2','3'],['1','4','6'],['2','1','2'],['3','4','2'],['1','2','5'],['1','7','8']]
groups_dict = {}
for sub_l in inp_list:
    if sub_l[0] not in groups_dict:
        groups_dict[sub_l[0]] = ' '.join(sub_l)
    else:
        groups_dict[sub_l[0]] += '; ' + ' '.join(sub_l[1:])
res = list(groups_dict.values())

print(res)   # ['1 2 3; 4 6; 2 5; 7 8', '2 1 2', '3 4 2']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获得列表或集合的第一个元素?

如何按每个列表的第一个元素对List <List <String >>进行排序?

选择嵌套列表的第一个元素

Python:嵌套列表中的第一个元素

根据数组的第一个元素对数组进行分组,而无需在Ruby中进行重复

按元组的第一个元素分组列表

如何按数组的第一个元素分组?

嵌套列表中的第一个元素的总和

如何提取嵌套列表的第n个元素的第一个元素(作为字符串列表)

创建数据框,根据列表的第一个元素进行匹配

如何通过第一个元素对象键对数组中的数组进行分组

当第一个元素匹配时,如何对嵌套列表进行排序?

如何在terraform的嵌套列表中切片第一个元素

在列表的第一个元素上进行Foreach

根据第一个元素组合嵌套列表

根据第一个元素合并列表

如何拆分嵌套列表元素的第一个元素?

根据第三个元素对列表进行排序,并返回两个第一个元素

我将嵌套列表作为Python字典的条目。如何打印第一个元素为“ S”的嵌套列表?

如何在优先排序列表长度的同时,根据第一个元素从嵌套列表中删除重复项?

基于第一个元素在列表列表中对列表进行分组

将嵌套列表的第一个元素绑定到嵌套列表的后续元素

基于嵌套列表的第一个元素合并嵌套列表

计算嵌套列表中的第一个元素

列表/嵌套列表中的第一个元素

如何访问嵌套列表的第一个元素?

如何通过嵌套列表中第一个元素的值提取子列表

如何根据第一个键的值对嵌套字典进行排序

如何获取嵌套列表中的所有元素,其中每个列表的第一个元素是特定数字?