我正在尝试解决一个练习,我有这样一个列表:
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,因此在输出中必须有一个group4和group5部分) 如果我能解决第一个问题,我就可以使用这些函数,而且组可以连续排序 我可以打印出来
def sortinlist(y):
y.sort(key = lambda x: x[1])
return y
def listtostr(y):
return ' '.join(map(str, y)
但是我不知道在outerlist中会有多少个内部列表,我想找到一个代码,可以通过查找innerlist的第一个元素来检测id,为这个id创建一个新的列表,然后在第二个内部列表中查找第一个元素,如果它的id与第一个innerlist的id相同,那么就附加到group1list中,如果它没有,那么就创建一个新的列表,等等。基本上,我想找到一种方法,用示例结构给出输出。你知道吗
使用集合和列表的解决方案:
产生
这看起来有点像一个家庭作业问题,所以我不打算为你做所有的,但我确实认为,通过使用字典,你将能够得到大部分的方式那里
这解决了
此时,容器包含
然后您可以对其进行排序
我们到了
输出
相关问题 更多 >
编程相关推荐