You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python函数筛选标记为1的对应最低价格元组项

问题描述

我写了这段代码:

from typing import List, Tuple

def cheapest_shark(prices: List, sharks: List ) -> Tuple:
    shp = zip(sharks, prices)
    sharkprices = tuple(shp)
    
    print(sharkprices)

输入是:

cheapest_shark([230, 180, 52, 390, 520], [1, 0, 0, 1, 1])

现在输出的元组里每个元素是(标记, 价格)的形式,但我需要每个元素为**(价格, 标记)**,且返回标记为1的项中价格最低的那个(本示例应返回(230, 1))。我试过把元组转成字典,循环筛选标记为1的项再取最低价,但没成功,求可行的实现方案。


解决方案

方法一:先筛选再取最小值

核心逻辑是先调整zip的顺序生成你要的(价格, 标记)元组,再筛选出标记为1的项,最后用min()直接取价格最低的项(min默认会按元组第一个元素排序):

from typing import List, Tuple

def cheapest_shark(prices: List[int], sharks: List[int]) -> Tuple[int, int]:
    # 调整zip顺序,生成(价格, 标记)格式的元组
    shark_price_pairs = zip(prices, sharks)
    # 筛选出标记为1的项
    valid_items = [pair for pair in shark_price_pairs if pair[1] == 1]
    # 返回价格最低的项
    return min(valid_items)

# 测试
print(cheapest_shark([230, 180, 52, 390, 520], [1, 0, 0, 1, 1]))  # 输出(230, 1)

方法二:用min()的key参数直接筛选(更简洁)

不用提前生成筛选列表,直接在min()里通过key参数先排除标记不为1的项,再按价格排序:

from typing import List, Tuple

def cheapest_shark(prices: List[int], sharks: List[int]) -> Tuple[int, int]:
    return min(
        zip(prices, sharks),
        # 优先排除标记不为1的项(给这类项设更高的排序权重),再按价格从小到大排序
        key=lambda x: (x[1] != 1, x[0])
    )

# 测试
print(cheapest_shark([230, 180, 52, 390, 520], [1, 0, 0, 1, 1]))  # 输出(230, 1)

为啥转字典会失败?

字典的键是唯一的,如果有多个相同标记的项,转字典会直接覆盖之前的条目;而且字典的结构不适合这种“筛选+取最小”的场景,用列表推导或直接调用min()是更适配的方案。

内容的提问来源于stack exchange,提问作者moon knight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:41:33