Python 列表只正确排序一次,然后在以后的时间中排序错误
我对csv文件进行了排序,并将其转换为列表列表。我现在需要根据特定的索引对列表进行排序 以下代码块起作用:Python 列表只正确排序一次,然后在以后的时间中排序错误,python,sorting,Python,Sorting,我对csv文件进行了排序,并将其转换为列表列表。我现在需要根据特定的索引对列表进行排序 以下代码块起作用: def highestPoint(copiedList): copiedList.sort(key=lambda x: x[2], reverse=True) date = copiedList[0][0] value = float(copiedList[0][2]) print("\nThe day where the stock reached
def highestPoint(copiedList):
copiedList.sort(key=lambda x: x[2], reverse=True)
date = copiedList[0][0]
value = float(copiedList[0][2])
print("\nThe day where the stock reached its highest point is",
date, "with" " a value of {:,.2f}".format(value))
现在,我假设我可以复制并粘贴这段代码,在两个点中替换[2]
,以便对列表排序并打印结果
很明显,print语句中的单词发生了更改,过程的名称也发生了更改,但其他所有内容都是一样的
我们有样本输出,我的答案不一样。第一个代码有效,但其他代码无效
每个代码块都是自己的过程,每次都传递
copiedList
。copiedList
只是原始dataList
的一个浅拷贝,我认为当您读取文件时,您没有将str转换为float,因此排序功能可能无法工作。例如:
print('10' > '5')
False
我建议您将数字转换为浮点数,而不是排序
对字符串进行数字排序时,如下所示:
numString = ["1","5000","3","6","30","4","2","200"]
print(sorted(numString))
['1', '2', '200', '3', '30', '4', '5000', '6']
使用
max()
和min()
而不是sort()
将大大加快编码速度。它们具有相同的key
参数。我将copiedList.sort(key=lambda x:x[2])
更改为copiedList=max(key=lambda x:x[2]
它生成了日期为2的整数和值应为1.00的整数。我做错了吗?是的。如果只需要最大值,则根本不需要修改copiedList
。只需执行以下操作:maxentry=max(copiedList,key=lambda x:x[2])
,date=maxentry[0]
,value=float(maxentry[2])
。注意:如果要转换为浮点
,则键函数可能会更好,因为要匹配lambda x:float(x[2])
。转换为浮点有效。我以前的代码是否尝试将浮点排序为字符串?@Brett以前的代码正在比较字符串。请参阅我的新更新