【问题标题】:Python dictionary manipulating items(getting min and max)Python字典操作项目(获取最小值和最大值)
【发布时间】:2016-12-24 06:28:32
【问题描述】:

编辑:我删除了我的解释部分,因为它是错误的,但我仍然无法转换它。 我正在研究python中的列表和字典,我遇到了这段代码。

x = min(minValue, key=lambda b: min([a( \
        myFunction(5,b),c) for c in something]))

this 的逻辑等价物是什么?看起来很简单,但是当我尝试用不同的代码编写它时,我没有得到同样的结果。 .如果没有全键和 lambda 的东西,怎么能以不同的方式写这个

看来我的解释是错误的。这是我尝试的更新代码。

for b in minValue:
   for c in something: 
       minimum=min(myFunction(5,b),c)
result=min(minimum)
return result

注意:通过逻辑等价,我并不是说提供的代码应该完全像我给出的代码那样计算它,但它应该具有相同的输出。

【问题讨论】:

  • 您尝试编写的等效代码是什么?一些上下文也会有所帮助。这些东西可能不叫 a、b、c 等。你在哪里看到这段代码?
  • 它从列表minValue 中获取值并将它们用作b 在计算中,然后它检查哪个计算给出最小的结果并返回它的b
  • 不,他们不是。我正在编辑问题以添加我的代码。这是在线python教学课的练习。我改变了变量概括我的理解
  • 你的函数必须返回b,而不是result
  • 1.您的等效代码缺少另一个级别的函数调用:a(myFunction(5, b), c)。 2. 第一个代码 sn-p 确实将任何内容分配给minValue。相反,它会遍历现有 minValue 集合中的项目。这些项目中的每一项都作为b 传递给lambda 函数。

标签: python list dictionary iteration


【解决方案1】:

我不确定,但可能是这样的

def example(minValue):

    data = []

    for b in minValue:

        values = []
        for c in something:
            values.append( a(myFunction(5,b),c) )
        result = min(values)

        # keep `result` and `b` which gives this `result`
        data.append( [result, b] )

    # find minimal `result` and `b` which gives this `result`
    x = min(data) # x = [result, b]

    # return `b` 
    return x[1]

#---

x = example(minValue)

编辑:min(data) 可能存在问题,因为min 将比较resultb,而原始版本仅比较result。它可能需要没有min() 的版本,但有:

if result < min_result: 
   min_result = result
   min_b = b

编辑:

def key(val):

    min_c = something[0]
    min_result = a(myFunction(5,val),min_c)

    for c in something[1:]:

        result = a(myFunction(5,val),c)

        if result < min_result:
            min_result = result
            #min_c = c

    return min_result


def example(minValue):

    min_b = minValue[0]
    min_result = key(min_b)

    for b in minValue[1:]:

        result = key(b)

        if result < min_result:
            min_result = result
            min_b = b

    return min_b

#---

x = example(minValue)

【讨论】:

  • 你为什么要把b放回列表中?
  • 找到最小的result 及其b,因为我必须返回b,而不是result
  • 我认为这应该给出正确的结果,但程序不接受它我会检查我是否在替换变量时出错
  • 是的,但原版从未出现在额外列表中。无论哪种方式,我觉得海报仍然应该提供一些背景信息,因为即使作为练习,这看起来也很可怕。例如,他们是否期望重新实现 min
  • @pvg - 这太可怕了,但我制作的版本没有额外的列表 - 现在我不需要 min() :)
猜你喜欢
  • 2016-05-19
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多