在Python中,是否有一种方法可以对由列表和元组组成的列表进行一致的排序?
对我来说,在Python中,是否有一种方法可以对由列表和元组组成的列表进行一致的排序?,python,Python,对我来说,a和b是我所期望的,那么为什么c不同呢?有没有办法使其与a和b保持一致,而不将所有内容转换为列表或元组 >>> a = [(1, 0), (0, 0)] >>> a.sort() >>> print a [(0, 0), (1, 0)] >>> >>> b = [[1], (0)] >>> b.sort() >>> print b [0, [1]] >&g
a
和b
是我所期望的,那么为什么c
不同呢?有没有办法使其与a
和b
保持一致,而不将所有内容转换为列表或元组
>>> a = [(1, 0), (0, 0)]
>>> a.sort()
>>> print a
[(0, 0), (1, 0)]
>>>
>>> b = [[1], (0)]
>>> b.sort()
>>> print b
[0, [1]]
>>>
>>> c = [[1, 0], (0, 0)]
>>> c.sort()
>>> print c
[[1, 0], (0, 0)]
>>>
只能出于排序的目的对其进行转换:
>>> c = [[1, 0], (0, 0)]
>>> c.sort(key=tuple)
>>> c
[(0, 0), [1, 0]]
也就是说,包含列表和元组组合的列表是一种代码味道。如果您不确定最外层的容器是否是列表,您可能还需要使用:
sorted(c, key=tuple)
因为c.sort()是一个只包含列表的函数。我想我应该加上这个。有趣的问题。你想用它做什么?就像我说的,我需要对事物进行排序,其中一些是列表,一些是元组,我不想再多做一步,把它们都转换成这样或那样。@MarkGaleck我不认为有任何方法可以避免这样做\那么,为什么不在添加新元素时将其转换为列表呢
a.extend(compiled.finditer(string))中m的列表(m.span())
@MarkGaleck绝对是的,使用键函数将所有内部元素转换为元组会带来性能代价。通过在将所有内容添加到列表时将其转换为列表,可以避免处理最初拥有的所有列表并将其转换为元组。这一点的美妙之处在于,由于元组是不可变的,tuple()
已经是元组的内容不会复制。因此,列表中已经存在的任何元组都不会因为用作键而使用任何额外内存。遗憾的是,转换为元组的列表确实需要复制。