我怎样才能更有效地获得最少的物品?
How can i get the minimum item more efficiently?
我有一个包含元组项的列表,如下所示 (id, cost, clicks, views)
:
statistic_data_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
我想获取满足以下条件的商品的id:
- 1 当不是所有
cost
项都等于0时,获取cost
最低的项的id。
- 2 当item的所有
cost
都为0时,如果item的clicks
不全部为0,则取clicks
最小的item的id。
- 3 当item的所有
clicks
都等于0时,如果item的views
不全部等于0,则取views
最小的item的id。
# (1)
# input:
[(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
# expected result:
12324 # (whose cost is lowest)
# (2)
# input:
[(12324, 0, 6, 9), (12325, 0, 5, 3), (12326, 0, 7, 2)]
# expected result:
12325 # (whose clicks is lowest when all cost is 0)
# (3)
# input:
[(12324, 0, 0, 9), (12325, 0, 0, 3), (12326, 0, 0, 2)]
# expected result:
12326 # (whose views is lowest when all cost is 0 also clicks)
如何更有效地获取指定项目的id?
# My attemp so far
cost_clicks_views_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
len_cost_not_0 = len(list(filter(lambda item: item[1], cost_clicks_views_list)))
len_clicks_not_0 = len(list(filter(lambda item: item[2], cost_clicks_views_list)))
len_views_not_0 = len(list(filter(lambda item: item[3], cost_clicks_views_list)))
if len_cost_not_0:
min_cost_id_list = [ item[0] for item in cost_clicks_views_list if item[1]==min([i[1] for i in cost_clicks_views_list]) ]
print(min_cost_id_list) # [(12324]
else:
if len_clicks_not_0:
min_clicks_id_list = [item[0] for item in cost_clicks_views_list if item[2] == min([i[2] for i in cost_clicks_views_list])]
print(min_clicks_id_list) # [(12325]
else:
if len_views_not_0:
min_views_id_list = [item[0] for item in cost_clicks_views_list if item[3] == min([i[3] for i in cost_clicks_views_list])]
print(min_views_id_list) # [12326]
非常欢迎任何评论。非常感谢。
您可以使用列表理解来检查这些。当所有项目中至少有一个 cost
不等于零时,要获得 cost
最低的项目的 id
,试试这个:
sdl = [(12324, 10, 0.6, 9), (12325, 11, 0.5, 3), (12326, 10, 0.7, 2)]
a = [j[0] for j in sdl if j[1]==min([k[1] for k in sdl if all([True if i[1] != 0 else False for i in sdl])])]
输出 :
a = [12324, 12326]
这里所有三个项目都有非零 cost
并且最低成本是 10
对应有两个 id 12324
和 12326
.
我有一个包含元组项的列表,如下所示 (id, cost, clicks, views)
:
statistic_data_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
我想获取满足以下条件的商品的id:
- 1 当不是所有
cost
项都等于0时,获取cost
最低的项的id。 - 2 当item的所有
cost
都为0时,如果item的clicks
不全部为0,则取clicks
最小的item的id。 - 3 当item的所有
clicks
都等于0时,如果item的views
不全部等于0,则取views
最小的item的id。
# (1)
# input:
[(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
# expected result:
12324 # (whose cost is lowest)
# (2)
# input:
[(12324, 0, 6, 9), (12325, 0, 5, 3), (12326, 0, 7, 2)]
# expected result:
12325 # (whose clicks is lowest when all cost is 0)
# (3)
# input:
[(12324, 0, 0, 9), (12325, 0, 0, 3), (12326, 0, 0, 2)]
# expected result:
12326 # (whose views is lowest when all cost is 0 also clicks)
如何更有效地获取指定项目的id?
# My attemp so far
cost_clicks_views_list = [(12324, 9, 6, 9), (12325, 11, 5, 3), (12326, 10, 7, 2)]
len_cost_not_0 = len(list(filter(lambda item: item[1], cost_clicks_views_list)))
len_clicks_not_0 = len(list(filter(lambda item: item[2], cost_clicks_views_list)))
len_views_not_0 = len(list(filter(lambda item: item[3], cost_clicks_views_list)))
if len_cost_not_0:
min_cost_id_list = [ item[0] for item in cost_clicks_views_list if item[1]==min([i[1] for i in cost_clicks_views_list]) ]
print(min_cost_id_list) # [(12324]
else:
if len_clicks_not_0:
min_clicks_id_list = [item[0] for item in cost_clicks_views_list if item[2] == min([i[2] for i in cost_clicks_views_list])]
print(min_clicks_id_list) # [(12325]
else:
if len_views_not_0:
min_views_id_list = [item[0] for item in cost_clicks_views_list if item[3] == min([i[3] for i in cost_clicks_views_list])]
print(min_views_id_list) # [12326]
非常欢迎任何评论。非常感谢。
您可以使用列表理解来检查这些。当所有项目中至少有一个 cost
不等于零时,要获得 cost
最低的项目的 id
,试试这个:
sdl = [(12324, 10, 0.6, 9), (12325, 11, 0.5, 3), (12326, 10, 0.7, 2)]
a = [j[0] for j in sdl if j[1]==min([k[1] for k in sdl if all([True if i[1] != 0 else False for i in sdl])])]
输出 :
a = [12324, 12326]
这里所有三个项目都有非零 cost
并且最低成本是 10
对应有两个 id 12324
和 12326
.