Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,是否有一种方法可以对由列表和元组组成的列表进行一致的排序?_Python - Fatal编程技术网

在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()
已经是元组的内容不会复制。因此,列表中已经存在的任何元组都不会因为用作键而使用任何额外内存。遗憾的是,转换为元组的列表确实需要复制。