python - 如何在Python中将列表的列表转换为组?

标签 python python-3.x list

我正在尝试解决一个练习,我有一个这样的列表:

outerlist = [[344,0,"str1"],[233,0,"str2"],[213,0,"str3"],[344,2,"str4"],
             [213,1,"str5"],[344,3,"str6"],[344,1,"str7"],[213,2,"str8"]]

内部列表中的第二个元素始终连续增加。

并且想要这样的输出:

Group 1
213 0 str3
213 1 str5
213 2 str8
Group 2
233 0 str2
Group 3
344 0 str1
344 1 str7
344 2 str4
344 3 str6

起初我考虑过按列表的第一个元素进行分组并编写此代码

list1 = []
list2 = []
list3 = []
for i in range(len(outerlist)):
    if outerlist[i][0] == 213:
        list1.append(outerlist[i])
    elif outerlist[i][0] == 233:
        list2.append(outerlist[i])
    elif outerlist[i][0] == 344:
        list3.append(outerlist[i])

但是outerlist可以有更多的内部列表作为元素,并且这些内部列表的第一个元素可以有不同的元素(而不是只有213、233、344,它可以是579或1000,因此在输出中必须有一个组4和组5节) 如果我能解决第一个问题,我可以使用这些函数,并且组可以连续排序 我可以打印它们

def sortinlist(y):
    y.sort(key = lambda x: x[1])
    return y
def listtostr(y):
    return ' '.join(map(str, y)

但我不知道外部列表中有多少个内部列表,并且想要找到一个可以通过查找内部列表的第一个元素来检测 id 的代码,为此 id 创建一个新列表,然后在中查找第一个元素第二个内部列表,如果它的 id 与第一个内部列表的 id 相同,则附加到组 1 列表,如果不是,则创建一个新列表,依此类推。基本上我想找到一种方法来提供具有示例结构的输出。

最佳答案

使用集合和列表的解决方案:

labels = list({l[0] for l in outerlist})
sortedlist = sorted(outerlist) 
groups = [[l for l in sortedlist if l[0]==x] for x in sorted(labels)]

for  i,values in enumerate(groups):
    print("Group",i+1)
    for v in values:
        print(*v)

产生

Group 1
213 0 str3
213 1 str5
213 2 str8
Group 2
233 0 str2
Group 3
344 0 str1
344 1 str7
344 2 str4
344 3 str6

关于python - 如何在Python中将列表的列表转换为组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361524/

相关文章:

python - block 中的 Django 模板翻译是不可能的

python - pandas 首次尝试线程化

jquery/css 将列表更改为下拉列表

r - 如何取消列出作为列表的数据框列

python - 如何找到最小均方误差二次上限?

python - 在导入 python 时。 ImportError : libcublas. so.9.0: 无法打开共享对象文件: 没有那个文件或目录

python - 从 python 调用 Matlab 函数

python - 如何将 Pydev 项目导入交互式控制台?

python - 按内部 "attribute"字典键值对字典进行排序

java - 从 Java 中的文件生成的数组中删除文本