繁体   English   中英

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

[英]Sort only the first two elements in each sub-array of 3 elements

我有一个数组:

list=[[1, 2, 3], [31, 10, 2], [7, 2, 4]]

而且我想对每个子数组中唯一的前两个元素进行排序(按递增顺序)。

列表应如下所示:

list=[[1, 2, 3], [10, 31, 2], [2, 7, 4]]

我以前的代码是:

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_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_unsorted因为list已经是python中的一个函数。

更快,不仅没有关于如何获得输入的更多上下文,而且访问更多工具 - 例如numpy。

但也许更pythonic的方式:

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关键字,因此不应将其用作变量名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM