Python 仅对3个元素的每个子数组中的前两个元素进行排序

Python 仅对3个元素的每个子数组中的前两个元素进行排序,python,arrays,sorting,Python,Arrays,Sorting,我有一个数组: list=[[1, 2, 3], [31, 10, 2], [7, 2, 4]] 我只想对每个子数组中的前两个元素进行排序(按递增顺序) 列表应如下所示: list=[[1, 2, 3], [10, 31, 2], [2, 7, 4]] list_unsorted = [[1, 2, 3], [31, 10, 2], [7, 2, 4]] list_sorted = [ [min(i[0], i[1]), max(i[0], i[1]), i[2] ] for i in li

我有一个数组:

list=[[1, 2, 3], [31, 10, 2], [7, 2, 4]]
我只想对每个子数组中的前两个元素进行排序(按递增顺序)

列表应如下所示:

list=[[1, 2, 3], [10, 31, 2], [2, 7, 4]]
list_unsorted = [[1, 2, 3], [31, 10, 2], [7, 2, 4]]
list_sorted = [ [min(i[0], i[1]), max(i[0], i[1]), i[2] ] for i in list_unsorted ]
我以前做的代码是:

list=[[1, 2, 3], [10, 31, 2], [2, 7, 4]]
for i in list:
  if list[0]>list[1]:
    list[0],list[1]=list[1],list[0]
  else:
    print('Do Nothing')

有没有更快的方法呢?

我认为这样做行不通,因为您只需要切换列表的前两个子列表。(
list[0]
list[1]
,而不是
list[i][0]
list[i][1]

我会用这样的方式:

list=[[1, 2, 3], [10, 31, 2], [2, 7, 4]]
list_unsorted = [[1, 2, 3], [31, 10, 2], [7, 2, 4]]
list_sorted = [ [min(i[0], i[1]), max(i[0], i[1]), i[2] ] for i in list_unsorted ]

此外,我将list重命名为
list\u unsorted
,因为list已经是python中的一个函数

更快,而不是没有更多关于如何获取输入的上下文,以及访问更多工具(如numpy)的权限

但也许是一种更具蟒蛇风格的方式:

alist=[[1, 2, 3, 5], [31, 10, 2], [7, 2, 4]]

def p(l):
  a,b,c=l[0], l[1], l[2:]
  if a>b:
    a,b=b,a
  return [a,b, *c]

print(list(map(p, alist)))
这通过在代码中使用变量“list”而不是变量“i”来防止错误之王,因为解释器会检测到它


作为一种良好的实践,由于list是一个python关键字,因此不应将其用作变量名。

可能并不重要。您的代码是否遇到性能问题?如果这是一个性能瓶颈,您可能首先应该使用其他数据结构(…可能)。可能有无分支的方法,但很难判断这些方法是否更好。您可以将此工作转移到
numpy
pandas
以加快速度。您所说的“更快”是什么意思?每个子列表是否总是有三个元素?