一、使用python内置函数进行排序
1.使用sort()函数对list进行排序
import random
# Easily create a list of numbers
data = list(range(10))
print("range data:", data)
# Randomly shuffle those numbers
random.shuffle(data)
print("shuffled data:", data)
# Sort the list of numbers
data.sort()
print("sorted data:", data)
-random.shuffle()随机打乱一个list中的数据,使最初的list变成一个无序的list
-data.sort()操作可以将data转换成一个有序的list
2.使用sorted()函数,可以生成一个有序的新list
newdata = sorted(data)
-newdata是对data进行排序后的有序list
-但data仍然是无序的,sorted()函数不改变原有list的排序
3.使用sorted()函数对无序的tuple排序(生成的结果为一个list)
# Convert to a tuple
datatup = tuple(data)
# Sort the tuple of numbers
# datatup.sort() 这句会报错
# Use sorted to sort the tuple
newdatatup = sorted(datatup)
-datatup是tuple类型,而tuple类型是不可改变的,所以无法使用sort()函数
-即使使用sorted()函数,得到的不是有序的新tuple,而是有序的新list,但list中的元素和原tuple中的元素一致
4.使用sorted()函数对无序的dictionary排序(生成的结果为一个list)
# Create a dictionary of squares (dictionary comprehension)
datamap = {key: key ** 2 for key in datatup}
print("data dictionary:", datamap)
# Use sorted to sort the dictionary
sortmap = sorted(datamap)
print("returned from sorted:", sortmap)
-sorted(datamap)得到的是一个有序的list,list中的元素和原dictionary中的key元素一致,相当于对字典中的key进行了排序
二、关于lambda的介绍
1.map函数的使用
# Easily create a list of numbers
data = list(range(10))
print("range data:", data)
def square(val):
return val ** 2
# Square all numbers in the list
squares = list(map(square, data))
print("squares:", squares)
-map接受至少2个参数,第一个参数必须是一个函数,第二个参数必须是一个sequence类型的数据,map(square,data)对data中的所有内容执行square操作
-list(map(square,data))将map(square,data)的结果转换为一个list
2.map函数的第一个参数可以是lambda类型,lambda相当于没有命名的函数
# Double all numbers in the list
doubles = list(map(lambda num: num * 2, data))
print("doubles:", doubles)
-lambda函数的使用语法如上,lambda num: num*2 没有名字也没有返回值
-冒号左边是参数,右边是对参数进行的操作(计算返回值的操作)
3.lambda函数举例1:使用lambda函数将两个list中的元素一一取出组成一个tuple的list
# Create a list of random numbers (list comprehension)
randnums = [random.randrange(2, num+3) for num in range(10)]
print("random numbers:", randnums)
# Create a list of tuples
tups = list(map(lambda num1, num2: (num1, num2), data, randnums))
print("tuples:", tups)
-该例子中lambda函数有两个参数num1和num2,函数的操作是将num1和num2组成一个tuple,而num1来自map函数的第二个参数data,num2来自map函数的第三个参数randnums
4.lambda函数举例2:使用lambda函数取出每一个tuple的最小值
# Create a list of the min values in the tuples
mins = list(map(lambda pair: min(pair[0], pair[1]), tups))
print("minimums:", mins)
-lambda函数的参数pair代表一个tuple,返回值为tuple两个元素中的最小值
-传入lambda函数的tuple来自由tuple组成的list,也就是map函数的第二个参数tups
5.与map函数使用类似的函数filter
# Create a list only of tuples where the second item is less than the first
newtups = list(filter(lambda pair: pair[1] < pair[0], tups))
print("filtered:", newtups)
-filter函数的第一个参数也是一个函数,第二个参数也是一个sequence
-filter函数的返回值通常比输入的sequence要小,因为filter只返回在第一个参数的lambda函数中判断为true的元素
-该例子中返回的新list(也就是newtups)只包含tups中满足第二个值小于第一个值条件的tuple
三、sort函数的一些其他参数使用
1.sort()默认为正序排序,如果需要逆序可以使用reverse=True
data.sort()
print("ascending sort:", data)
data.sort(reverse=True)
print("descending sort:", data)
2.sort()可以使用key来指定被sort的元素
# Create a list of tuples
datatups = [(item, random.randrange(3, 15)) for item in data]
print("data tuples:", datatups)
# Sort the list
datatups.sort()
print("sorted data tuples:", datatups)
datatups.sort(key=lambda pair: pair[1])
print("sorted by second item:", datatups)
datatups.sort(key=lambda pair: pair[0] * pair[1], reverse=True)
print("sorted by product:", datatups)
-key被用来指定sort的元素,需要是一个函数
-上面的例子中默认情况按照tuple的第一个元素进行排序,第二种情况指定按照第二个元素排序,第三种情况指定按照tuple两个元素的乘积进行排序
3.sorted()函数同样支持reverse和key参数
# Use sorted to sort the list
newdata = sorted(datatups, key=lambda pair: pair[1], reverse=True)
print("tuples after sorted:", datatups)
print("returned from sorted:", newdata)