给出以下列表:
lst = [[3,5],[3,10],[3,15],[3,102],[5,21],[5,23],[5,50]]
我想获得以下内容[[3,5,10,15,102], [5,21,23,50]]
请注意,列表根据第一个元素的值按升序排序。
做到这一点最有效的方法是什么?这就是我的想法:
步骤 1:创建一个具有唯一第一个元素的列表。 (即本例中的 3 和 5)
first_elements = [] #initialize empty list to which we will append all first elements
for i in range(len(lst)):
first_elements.append(lst[i][0])
first_elements = list(set(first_elements)) #Filter out the unique first elements
first_elements = [3,5]
步骤2:根据第一个元素过滤lst。将这些附加到新列表中。
new_merged_list = [] # create new list to append to
for i in range(len(first_elements)):
first_element_to_filter_by = first_elements[i]
filtered_2d_list = [i for i in lst if i[0] == first_element_to_filter_by]
new_merged_list.append([first_element_to_filter_by])
for j in range(len(filtered_2d_list)):
(new_merged_list[i]).append(filtered_2d_list[j][1])
这给了我正确的答案,如下所示。
new_merged_list = [[3, 5, 10, 15, 102], [5, 21, 23, 50]]
我的问题 - 有没有更有效的方法来做到这一点?我不知道这会扩展到(例如)100000 x 2 的列表。
感谢您的帮助!