在Python中对列表中的数字字符串进行排序
排序列表是一项简单的任务,并且已在许多情况下处理。随着机器学习和数据科学的兴起,有时我们可以获取数字列表格式的数据,但数据类型为字符串。在这种情况下,通用排序函数会给出错误的结果,因此,必须采用其他几种方法来执行此特定任务。让我们讨论执行此操作的方式。
方法#1:朴素的方法
在朴素的方法中,需要将所有元素类型转换为通过循环迭代的列表的整数。之后,使用通用排序函数来执行任务。
# Python3 code to demonstrate
# numeric string sorting
# using naive method
# initializing list
test_list = [ '4', '6', '7', '2', '1']
# printing original list
print ("The original list is : " + str(test_list))
# using naive method
# numeric string sorting
for i in range(0, len(test_list)) :
test_list[i] = int(test_list[i])
test_list.sort()
# printing result
print ("The resultant sorted list : " + str(test_list))
输出:
The original list is : ['4', '6', '7', '2', '1']
The resultant sorted list : [1, 2, 4, 6, 7]
方法 #2:使用sort()
使用 key
通用 sort() 可用于执行此特定任务,但必须将键指定为整数才能在内部执行排序函数时将其转换为整数。
# Python3 code to demonstrate
# numeric string sorting
# using sort() + key
# initializing list
test_list = [ '4', '6', '7', '2', '1']
# printing original list
print ("The original list is : " + str(test_list))
# using sort() + key
# numeric string sorting
test_list.sort(key = int)
# printing result
print ("The resultant sorted list : " + str(test_list))
输出:
The original list is : ['4', '6', '7', '2', '1']
The resultant sorted list : ['1', '2', '4', '6', '7']
方法#3:使用sorted()
+ key
该函数具有与上述函数类似的内部工作方式。该函数比上述函数的改进之处在于它不会改变原始列表的顺序,只是返回一个视图来显示,因此在必须保持顺序的情况下很有用。
# Python3 code to demonstrate
# numeric string sorting
# using sorted() + key
# initializing list
test_list = [ '4', '6', '7', '2', '1']
# printing original list
print ("The original list is : " + str(test_list))
# using sorted() + key
# numeric string sorting
res = sorted(test_list, key = int)
# printing result
print ("The resultant sorted list : " + str(res))
输出:
The original list is : ['4', '6', '7', '2', '1']
The resultant sorted list : ['1', '2', '4', '6', '7']
方法#4:使用sorted()
+ key 和 len()
此函数与上述函数有类似的内部工作,但在大整数的情况下,与使用 key = int 相比,速度快 100 倍。此函数函数的改进是性能。这种排序方法也可以应用于sort()。
# Python3 code to demonstrate
# numeric string sorting
# using sorted () + key with (len (x), x)
# initializing list
test_list = [ '4', '6', '7', '2', '1']
# printing original list
print ("The original list is : " + str (test_list))
# using sorted () + key with (len (x), x)
# numeric string sorting
res = sorted (test_list, key = lambda x: (len (x), x))
# printing result
print ("The resultant sorted list : " + str (res))
输出:
The original list is : ['4', '6', '7', '2', '1']
The resultant sorted list : ['1', '2', '4', '6', '7']