【问题标题】:How to access an "anonymous" variable?如何访问“匿名”变量?
【发布时间】:2014-10-16 05:19:00
【问题描述】:

有一些内置函数可以直接修改对象并返回 None。一个例子是listsort()方法,其中对象本身被修改,即排序,但返回None

我的问题,我如何访问 list(T).sort(),其中 T 是一个元组,说 T=(5,1,2,3,4,5),而不首先将 list(T) 分配给显式变量?

【问题讨论】:

  • 您不能,但您可以使用sorted() 返回排序后的对象。你到底想做什么?
  • 只是一个学术练习。约书亚的答案正是我所寻求的。
  • 也许我被实用性蒙蔽了双眼,但我不确定这里问的是什么:您想在哪个点或阶段“访问”list(T).sort()?你想要那个表达的哪一部分?你会用它做什么?
  • 只是一个学术练习,例如sorted(list(T))[0]

标签: python list sorting python-2.7 tuples


【解决方案1】:

元组是不可变的,因此您无法真正就地更改元素的顺序。这就是为什么tuple.sort 函数 存在。所以你有两个选择。

  1. 创建一个对元素进行排序的新元组对象

  2. 将元组转换为允许对其元素进行排序的对象(例如lists)。

所以,如果你有一个元组,你可以简单地做

sorted(tupleObject)

获取已排序项目的新列表。然后,您可以根据需要将该列表对象转换为元组,如下所示

tuple(sorted(tupleObject))

【讨论】:

    【解决方案2】:

    在 Python 中没有传统意义上的变量;有名称,指向对象。对象具有值和类型,名称只是引用对象的一种方式。

    所以名称本身没有任何意义——名称仅在指向对象时使用,否则“暂时”使用没有名称的对象是完全可以的。

    这就是您的示例中发生的情况。当您创建 list(T) 并且不将其分配给名称时,您无法再引用它。

    为了解决你的实际问题,你可以直接在一个元组上使用sorted(),但是注意它会返回一个列表:

    >>> foo = sorted((0,1,4,3,5))
    >>> foo
    [0, 1, 3, 4, 5]
    

    您仍然无法访问原始未排序的元组(除非您先将其分配给名称)。

    【讨论】:

      【解决方案3】:

      使用 sorted 内置函数而不是 list.sort

      sorted(list(T))
      

      【讨论】:

      • 元组可以直接排序,不需要转换成列表
      猜你喜欢
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多