列表元组
读入一个列表,按照绝对值从大到小排序,如果绝对值相同,则正数在前面。例如列表[3,-4,2,4],排序后的结果为[4,-4,3,2]
建议使用list1=eval(input())直接读入一个列表。
题目的输入为一行,是一个元素类型都是数值的列表,形如[3,-4,2,4]。
输出为一行,是按照绝对值从大到小排序后的列表里的元素,元素之间用一个英文半角逗号分隔,形如4,-4,3,2
- 输入:[3,-4,2,4]
- 输出:4,-4,3,2
- 输入:[5.2,3,4,6,-5.2]
- 输出:6,5.2,-5.2,4,3
-
- list1=eval(input())
- list1.sort(key=lambda x:(abs(x),x),reverse=True)
- print(','.join(map(str,list1)))
print(','.join(map(str,list1)))
这句代码的意思是:对
sorted_lst
列表中的每个元素使用str
函数进行转换(将每个元素转换为字符串),然后用,
将这些字符串连接起来,最后输出结果。这句代码中用到了两个Python内置函数:
1.map()
函数:这个函数接收两个参数,一个是函数,一个是可迭代对象(如列表)。它会将函数应用到可迭代对象的每个元素上,并返回一个包含所有结果的迭代器。在这个例子中,
map(str, sorted_lst)
将str
函数应用到sorted_lst
的每个元素上,返回一个包含所有字符串形式的元素的迭代器。
2.join()
函数:这个函数是字符串的一个方法,用于将一个字符串列表(或其他可迭代对象)中的所有字符串连接起来,形成一个新的字符串。它接收一个字符串作为参数,这个字符串将被用作各个元素之间的分隔符。在这个例子中,
','.join(...)
将使用,
作为分隔符,将map()
函数返回的迭代器中的所有字符串连接起来。这句代码的作用是将
sorted_lst
列表中的每个元素转换为字符串,然后用,
将这些字符串连接起来,最后输出结果。
list1.sort(key=lambda x:(abs(x),x),reverse=True)
这句代码的意思是:对
list1
列表进行原地排序(即修改list1
本身,而不是创建一个新的排序后的列表),排序的关键字是一个自定义的函数,这个函数接收一个元素x
,并返回一个元组(abs(x), x)
。这个元组首先按照元素的绝对值(abs(x)
)进行排序,如果绝对值相同,则按照元素本身(x
)进行排序。reverse=True
表示进行降序排序,即绝对值大的元素在前,绝对值小的元素在后;如果绝对值相同,则负数在后,正数在前。具体来说,这句代码中用到了以下的知识点:
sort()
方法:这是Python中列表的一个方法,用于对列表进行原地排序。它接收一个可选的key
参数,用于指定排序的关键字。key
参数应该是一个函数,这个函数接收一个元素,并返回一个用于排序的值。lambda
函数:这是Python中的一种匿名函数,用于定义一个简单的函数。在这个例子中,lambda x: (abs(x), x)
定义了一个函数,这个函数接收一个元素x
,并返回一个元组(abs(x), x)
。- 元组比较:在Python中,元组可以进行比较操作。当比较两个元组时,首先比较元组的第一个元素,如果第一个元素相同,则比较第二个元素,以此类推。在这个例子中,元组的第一个元素是元素的绝对值(
abs(x)
),第二个元素是元素本身(x
)。reverse
参数:这是sort()
方法的一个可选参数,用于指定排序的顺序。如果reverse=True
,则进行降序排序;如果reverse=False
(默认值),则进行升序排序。总的来说,这句代码的作用是按照元素的绝对值进行降序排序,如果绝对值相同,则按照元素本身进行排序(负数在后,正数在前)。
list1=eval(input()) # 使用sorted函数和自定义的排序关键字对列表进行排序 sorted_lst = sorted(list1, key=lambda x: (abs(x), x),reverse=True) for x in range(len(sorted_lst)): print(sorted_lst[x],end="") if x!=len(sorted_lst)-1: print(",",end="")