【问题标题】:why is the lambda order partially reversing in python?为什么 lambda 顺序在 python 中部分反转?
【发布时间】:2020-08-17 14:12:49
【问题描述】:

我写了一个简单的脚本

numbers = (1,2,3,4)
srebmun = (4,3,2,1)
div = lambda x,y : x/y
result = map(div,numbers,srebmun)
divNum = set(result)
print(divNum)

我希望顶部的数字除以底部的数字,所以 (1/4,2/3,3/2,4/1) 但我得到的是 1/4,2/3,4/1,3 /2 ({0.25, 0.6666666666666666, 4.0, 1.5})。我错过了什么明显的东西吗?

【问题讨论】:

  • 未订购套装?如果您想订购,请尝试list(result)
  • 什么是例外输出?
  • -2 分漏掉一些明显的东西哈哈

标签: python dictionary lambda set


【解决方案1】:

您的问题是 set 没有排序。您可以将结果转换为列表而不是集合并保持顺序或使用自定义 OrderedSet

【讨论】:

    【解决方案2】:

    正如已经提到的sets 不保留顺序,您可以按照以下方式将结果转换为元组

    numbers = (1,2,3,4)
    srebmun = (4,3,2,1)
    div = lambda x,y : x/y
    result = map(div,numbers,srebmun)
    divNum = tuple(result)
    print(divNum)  # (0.25, 0.6666666666666666, 1.5, 4.0)
    

    或者在print中解压你的result(使用*):

    numbers = (1,2,3,4)
    srebmun = (4,3,2,1)
    div = lambda x,y : x/y
    result = map(div,numbers,srebmun)
    print(*result)  # 0.25 0.6666666666666666 1.5 4.0
    

    请注意,默认情况下使用空格作为分隔符,如果您想使用其他内容,请使用 sep 关键字参数指定它,即:

    print(*result, sep=', ')  # 0.25, 0.6666666666666666, 1.5, 4.0
    

    请注意,这确实会耗尽result(以后不能再使用它)。

    【讨论】:

      【解决方案3】:

      set 没有订单。

      在这种情况下,最好使用列表推导:

      [x/y for x,y in zip(numbers,srebmun)]
      

      【讨论】:

      • 您在误导 - 地图上的列表将起作用并保持项目的顺序。
      • 嗯,对我来说,使用上面的代码 list(result) 返回 [ ]list(map(...)) 给出了所需的结果。你知道区别在哪里吗?
      • 在致电list(result) 之前,您是否在result 中使用过地图?如果是这样,那就是原因。一旦一张地图被消耗,它将是空的。
      • 你是对的!通过复制代码并构建集合,map 已被消耗。感谢您的知识!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      相关资源
      最近更新 更多