【问题标题】:Sort a deeply nested tuple对深度嵌套的元组进行排序
【发布时间】:2013-12-03 01:54:33
【问题描述】:

我有一个嵌套元组列表,如下所示:

l = [('apple', ['gala','fuji', 'macintosh']),
('pear', ['seckel','anjou','bosc'])]

而且我喜欢按字母顺序对元组的第二项进行排序,使其看起来像:

l2 = [('apple', ['fuji','gala', 'macintosh']),
('pear', ['anjou','bosc','seckel'])]

我知道我可以将sorted(l) 应用于它,但我对 Python 非常陌生,并且在迭代时遇到了问题。我该怎么做?

【问题讨论】:

    标签: python python-3.x iteration tuples


    【解决方案1】:

    类似于以下内容 - 使用列表组合构建新元组...

    l = [('apple', ['gala','fuji', 'macintosh']),
    ('pear', ['seckel','anjou','bosc'])]
    
    l2 = [(k, sorted(v)) for k, v in l]
    # [('apple', ['fuji', 'gala', 'macintosh']), ('pear', ['anjou', 'bosc', 'seckel'])]
    

    【讨论】:

      【解决方案2】:

      您可以使用 list.sort()“就地”排序。 这种方法可以节省您的分配,并且您无需触摸按键。

      for _,v in l: v.sort()
      

      【讨论】:

      • 我会尽量不去不必要地打开包装,然后做:for i in l: i[1].sort()
      • 哎哟。我不知道这会起作用......它违反了元组的不变性,这很奇怪。其实有点吓人。更新:我想这没关系,有一个列表,你不能在需要不变性的任何地方(例如 dict 键)使用它。需要更新我对“不变性”的假设......
      • @CorleyBrigman 元组仍然是不可变的......但是,它包含可变对象......有一个明显的区别......例如t = ([1],) - 你不能像t[0] += [2]那样做效果是试图改变元组包含的对象,而如果你这样做 t[0].extend([2]) 那就没问题了,因为你刚刚改变了底层对象并且元组仍然是一样的......
      • @JonClements - 是的,这是有道理的。来自 C++,您可以在其中动态“授予”对象的 const 状态(并且对象不一定天生就是可变或不可变的,这是它们或使用它的函数头的声明方式),它是一个不同的模型。只是我要记住的事情。
      猜你喜欢
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多