基于第一个整数对列表进行排序
问题描述:
我在Python中对列表进行排序时遇到了问题。出于某种原因,它确实将列表排列在最高值上,但在该过程完成之后,该列表中的其他元素不再被排序。基于第一个整数对列表进行排序
我的代码:
import csv
id_list = []
with open('source/to/file/output.csv', 'rt') as f:
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
test = "177"
if test == row[0]:
id_list.append([row[2],row[1]])
generated_list = id_list[0], id_list[16], id_list[20]
print(generated_list)
print(sorted(generated_list))
打印的结果是:
-- (['17', '179'], ['5', '2641'], ['9', '3705']) # not sorted
-- [['17', '179'], ['5', '2641'], ['9', '3705']] # sorted
我会想到的是,排序方法将输出:
-- [['17', '179'], ['9', '3705'], ['5', '2641']] # sorted
我做有问题?
答
Python的排序将基于第一个元素列表lexicographicaly因为你的字符串,那GET骑使用一键功能进行排序基于int
值:
print(sorted(generated_list,key=lambda x:int(x[0]),reverse=True))
演示:
>>> sorted(generated_list,key=lambda x:int(x[0]),reverse=True)
[['17', '179'], ['9', '3705'], ['5', '2641']]
或者如评论中所述,您可以在排序之前将您的号码转换为整数,也可以将您的行解包以拒绝多重索引:
with open('source/to/file/output.csv', 'rt') as f:
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
test = "177"
row1,row2,row3=row
if test == row1:
id_list.append([int(row2),row(row1)])
你为什么期待? Python是**强类型**,它不会将字符串视为数字。见例如http://stackoverflow.com/q/4836710/3001761一些替代品。 – jonrsharpe