对化学和系数的元组进行排序[重复]
Posted
技术标签:
【中文标题】对化学和系数的元组进行排序[重复]【英文标题】: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')]
我知道这真的很基本,我似乎可以弄清楚。
【问题讨论】:
您的问题与化学物质和系数无关,如果您尝试以更笼统的方式表达问题,那么您更有可能找到问题的答案。 【参考方案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】:使用sort
的key
参数:
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))
【讨论】:
以上是关于对化学和系数的元组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章