将此循环转换为列表理解
Converting this loop to a list comprehension
我想通过只保留元素 2 中具有最小值的列表来生成唯一 ID 列表。
例如,给定列表:
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]`
预期输出:
[['Id1', 1, 40],['Id2', 10,40]]
这是我的工作示例,但它很笨拙。我认为这可能可以通过单个列表理解来完成。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = list(set([x[0] for x in list1]))
unique_list = [[x] for x in unique_list]
for x in unique_list:
id = x[0]
min_val = min([y[1:] for y in list1 if y[0] == id])
x.extend(min_val )
print unique_list
您可以使用 itertools.groupby
按子列表中的第一个元素分组,您可以使用 key
参数获得 min
以按子列表中的其余元素排序.
>>> from itertools import groupby
[min(list(g), key = lambda i: i[1:]) for k, g in groupby(list1, lambda i: i[0])]
[['Id1', 1, 40], ['Id2', 10, 40]]
一种非常幼稚但易于理解的方法。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = []
for list_element in list1:
appendable = True
for temp_list in unique_list:
if list_element[0] == temp_list[0]:
if temp_list[1] < list_element[1]:
appendable = False
else:
unique_list.remove(temp_list)
if appendable == True:
unique_list.append(list_element)
unique_list.sort()
print unique_list
我想通过只保留元素 2 中具有最小值的列表来生成唯一 ID 列表。
例如,给定列表:
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]`
预期输出:
[['Id1', 1, 40],['Id2', 10,40]]
这是我的工作示例,但它很笨拙。我认为这可能可以通过单个列表理解来完成。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = list(set([x[0] for x in list1]))
unique_list = [[x] for x in unique_list]
for x in unique_list:
id = x[0]
min_val = min([y[1:] for y in list1 if y[0] == id])
x.extend(min_val )
print unique_list
您可以使用 itertools.groupby
按子列表中的第一个元素分组,您可以使用 key
参数获得 min
以按子列表中的其余元素排序.
>>> from itertools import groupby
[min(list(g), key = lambda i: i[1:]) for k, g in groupby(list1, lambda i: i[0])]
[['Id1', 1, 40], ['Id2', 10, 40]]
一种非常幼稚但易于理解的方法。
list1 = [['Id1', 1, 40],['Id1', 2, 30],['Id2', 10,40]]
unique_list = []
for list_element in list1:
appendable = True
for temp_list in unique_list:
if list_element[0] == temp_list[0]:
if temp_list[1] < list_element[1]:
appendable = False
else:
unique_list.remove(temp_list)
if appendable == True:
unique_list.append(list_element)
unique_list.sort()
print unique_list