我正在尝试解决一个练习,我有一个这样的列表:
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/