如何在Python中向列表列表添加索引

时间:2018-05-02 10:58:59

标签: python arrays python-3.x sorting for-loop

我想在列表中对我目前拥有的列表进行排序,这不是问题,我相信我已将值保存为数组中的单个索引,但需要将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

正如您所看到的那样,它们应该是两个不同的索引,以便我可以按照末尾的数字对列表中的列表进行排序。

3 个答案:

答案 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) genderathlete值)与展示内容混合,几乎无法使用。要么只是存储值,即:

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]))