簡體   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