我想在列表中对我目前拥有的列表进行排序,这不是问题,我相信我已将值保存为数组中的单个索引,但需要将finishTime作为单独的索引,因为我会需要按此值对数组进行排序。此代码的上下文是一个简单的运动员竞赛数据输入表单。 代码在
之下import time
datasets= []
for i in range(1, 3):
print("Inputting Data for Lane", i)
gender = input("Is the athlete male or female ")
athlete = input("What is the athletes name ")
finishTime = input("What was the finishing time ")
dataset = ("Gender =", gender, "|" ,"Athlete =", athlete, "|","Finish time", finishTime)
datasets.append(dataset)
for s in datasets:
time.sleep(1)
print("")
print(*s)
看起来应该是这样的
>Male John, 9
>Female Sarah, 7
正如您所看到的那样,它们应该是两个不同的索引,以便我可以按照末尾的数字对列表中的列表进行排序。
答案 0 :(得分:0)
使用您的列表列表,使用sort()
对列表进行排序,或使用sorted()
获取新的排序列表。使用key
参数来对任一函数进行排序,以对列表的最后一个元素进行排序。如果您需要从最大完成时间到最短完成时间的项目,请设置reverse=True
:
datasets.sort(key=lambda dataset: float(dataset[-1]), reverse=True)
这将根据每个嵌套列表的最后一项的数字浮点值对列表进行排序。您可能更愿意使用Decimal
而不是float
来避免精度损失,尤其是在您需要对时间进行计算时。
但是,我认为你最好使用字典,名为元组,甚至是普通的元组而不是内部列表。以下是使用字典的示例:
datasets = []
for i in range(1, 3):
dataset = {}
print("Inputing Data for Lane", i)
dataset['lane'] = i
dataset['gender'] = input("Is the athlete male or female ")
dataset['athlete'] = input("What is the athletes name ")
dataset['finishTime'] = float(input("What was the finishing time "))
datasets.append(dataset)
datasets.sort(key=lambda d: d['finishTime'], reverse=True)
for dataset in datasets:
print('{} {}, {}'.format(dataset['gender'], dataset['athlete'], dataset['finishTime']))
答案 1 :(得分:0)
首先使用正确的数据结构 - 这:
company
将数据(("Gender =", gender, "|" ,"Athlete =", athlete, "|","Finish time", finishTime)
,gender
和athlete
值)与展示内容混合,几乎无法使用。要么只是存储值,即:
finishTime
您知道,对于 datasets.append((gender, athlete, finishTime))
中的每个“行”,datasets
是性别,row[0]
是名称,row[1]
是时间。
row[2]
如果您想要更明确的内容,请使用dicts:
row = datasets[0]
print("Gender : {}".format(row[0]))
因此,对于每一行,您可以按键而不是索引获取值:
datasets.append(
{"gender": gender, "athlete": athlete, "finishTime": finishTime}
)
然后你肯定想让row = datasets[0]
print("Gender : {}".format(row["gender"]))
成为一个整数 - finsihTime
返回一个字符串,而字符串的排序方式与整数不同:
input()
然后,您只需将正确的>>> lst = ["15", "2", "21", "3"]
>>> sorted(lst)
['15', '2', '21', '3']
>>> lst2 = [15, 2, 31, 3]
>>> sorted(lst2)
[2, 3, 15, 31]
回调函数传递给key
。如果你使用元组:
sorted()
如果你使用dicts:
>>> datasets
[('male', 'foo', 15), ('female', 'bar', 11)]
>>> sorted(datasets, key=lambda row: row[2])
[('female', 'bar', 11), ('male', 'foo', 15)]
答案 2 :(得分:-1)
import time
datasets= []
for i in range(0, 3):
print("Inputting Data for Lane", i)
gender = str(input("Is the athlete male or female ")) # female|male check missing...
athlete = str(input("What is the athletes name "))
finishTime = str(input("What was the finishing time "))
dataset = [gender, athlete, finishTime]
datasets.append(dataset)
print("{0:<10}{1:<10}{2:<15}".format("Gender","Athlete","Finish time"))
ds = sorted(datasets, key=lambda x:x[2], reverse=False)
for s in ds:
time.sleep(1)
print("{0:<10}{1:<10}{2:<15}".format(s[0], s[1], s[2]))