我有一个数组:
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')
有没有更快的方法呢?
答案 0 :(得分:2)
我不认为这会有效,因为您只需切换列表的前两个子列表。 (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中的一个函数。
答案 1 :(得分:1)
更快,不仅没有更多关于如何获得输入的背景,而且可以访问更多工具 - 例如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关键字,因此不应将其用作变量名。