比较两个列表并根据匹配的数据创建多个列表

时间:2017-09-14 13:45:36

标签: python-3.x list loops match

我有20部电影的清单,保存如下:

library = [
['name1','director1','genre1',running_time_in_mins_1],
['name2','director2','genre2',running_time_in_mins_2],

等达20个

基于该库,我需要能够显示特定类型的所有电影的平均运行时间。我希望输出如下内容:“xyz的平均运行时间是###分钟”。可以有任意数量的流派(目前在我的图书馆中有6种)或图书馆中的电影。

我可以使用

创建一个独特类型的列表
genre=[]
for y in range (0,len(library)):
    if (library[y][2]) not in genre:
        genre.append(library[y][2])

然后我想我会为每个类型创建单独的列表并添加匹配的运行时间但这不起作用

for x in range (len(library)):
    for z in range(0,(len(genre))):
        if library[x][2] == genre[z]:
            z=[]
            z.append(library[x][3])
print(z)

2 个答案:

答案 0 :(得分:0)

pandas是一个很好的图书馆,可以做你想要的,尽管学习起来有点棘手。

目前,请尝试:

for genre in set(row[2] for row in library):
    times = [row[3] for row in library if row[2]==genre]
    print("average runtime for", genre, "is", sum(times)/len(times))

答案 1 :(得分:0)

List comprehensions是一个非常有用的工具

获取唯一导演列表:

>>> library = [['n1', 'd1', 30], ['n2', 'd2', 40], ['n1', 'd2', 20]]
>>> set([x[1] for x in library])
set(['d2', 'd1'])

获取特定名称的时间列表

>>> times = [x[2] for x in library if x[0] == 'n1']
[30, 20]

计算平均时间

>>> sum(times) / len(times)  # python 3
25

但是列表列表实际上并不是最优的,并且使代码不可读(什么是x[0]?)。根据你获取数据的方式,你想用它做什么以及你想花多少时间学习更多python /库,我建议:字典列表,类列表,pandas数据帧或数据库。