【问题标题】:Sort Tuple of chemical and coeff [duplicate]对化学和系数的元组进行排序[重复]
【发布时间】:2012-12-06 00:07:36
【问题描述】:

可能重复:
How to sort (list/tuple) of lists/tuples?

我有一个元组列表,我想按元组中的第二个值按数字顺序排序。我正在使用的列表示例是:

[('H2O', '6'), ('O2', '4')]

所以在这种情况下我想要的是:

[('O2','4'),('H2O',6')]

我知道这真的很基本,我似乎可以弄清楚。

【问题讨论】:

  • 您的问题与化学物质和系数无关,如果您尝试以更笼统的方式表达问题,那么您更有可能找到问题的答案。

标签: python


【解决方案1】:

您需要使用sort(或sorted)的key 参数。它是一个传递可迭代对象的每个元素(在本例中为每个元组)的函数。

你可以使用operator.itemgetter...

In [1]: import operator

In [2]: chem = [('H2O', '6'), ('O2', '4')]

In [3]: sorted(chem, key=operator.itemgetter(1))
Out[3]: [('O2', '4'), ('H2O', '6')]

或者一个简单的函数:

In [4]: sorted(chem, key=lambda x: x[1])
Out[4]: [('O2', '4'), ('H2O', '6')]

编辑:interjay is right:最好将第二项转换为数字:

sorted(chem, key=lambda x: int(x[1]))

否则它们将按字母顺序排序。

【讨论】:

    【解决方案2】:
    >>> l = [('H2O', '6'), ('O2', '4')]
    >>> l.sort(key = lambda x: int(x[1]))
    >>> l
    [('O2', '4'), ('H2O', '6')]
    

    sort 方法对in-place 进行排序,因此会修改您的list

    您也可以使用sorted 函数,该函数返回排序后的列表,同时保持原始列表不变。

    >>> sorted(l, key=lambda x: int(x[1]))
    [('O2', '4'), ('H2O', '6')]
    >>> l
    [('H2O', '6'), ('O2', '4')]  # Original list unmodified
    

    如果我们想遍历排序列表,我们通常使用sorted 函数。

    【讨论】:

      【解决方案3】:

      使用sortkey参数:

      mylist.sort(key = lambda x: int(x[1]))
      

      这会将元组中的第二个元素转换为整数,并按这些整数排序。

      由于您的元组在第二个元素中包含数字,因此将数字存储在元组中而不是字符串中更有意义。如果这样做,您可以使用以下方式进行排序:

      import operator
      mylist.sort(key = operator.itemgetter(1))
      

      【讨论】:

        【解决方案4】:

        你必须先import operator 现在使用key参数到list.sort()

        list.sort(key=lambda x: x[1])
        

        为了更快,

        list.sort(key=operator.itemgetter(1))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-11
          • 2021-07-25
          • 1970-01-01
          • 2016-04-27
          相关资源
          最近更新 更多