Python列表映射

2024-10-05 10:05:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有好几张单子,我想把它们排在一起,但我不太清楚该怎么做。在

我正在收集赛马比赛结果的实况。如果放弃比赛,饲料只列出一次赛程/时间和三匹马及其位置(前三名)或四匹马和空白(即“”)位置。以下是我的清单:

course, time, abandoned, horses, position

名单是有序的。在

coursetime和{}都有相同数量的元素(放弃是布尔函数的列表,真正的意思是种族被放弃)。在

horses是(3*非放弃种族数量)+(4*放弃种族数量)马的列表。在

position是马的位置列表。如果一场比赛被放弃,位置将是“”,否则是“1”,“2”,“3”(字符串!)。在

示例列表:

没有放弃任何种族

^{pr2}$

所以,在00:00的比赛中,在A赛道上,“马萨1号”获得第一名,“马萨2号”获得第二名,“马萨3号”获得第三名

那里有一场被遗弃的比赛

courses = ["CourseX", "CourseX", "CourseY"]
times   = ["01:00",  "02:00", "01:00"]
abandoned = [False, False, True]
horses = ["X1", "X2", "X3", "X4", "X5", "X6", "Y1", "Y2", "Y3", "Y4"]
positions = ["1","2","3","1","2","3","","","",""]

所以,在CourseX有两场比赛,但是CourseY的比赛被放弃了。在

最后我想得到的是这样的元组列表:

[(A Race Course, 00:00, False, Horsey, 1), (A Race Course, 00:00, False, Horsey 2, 2) ... ]

我不知道该怎么做,建议?在

干杯

皮特


Tags: false列表数量timeposition单子racecourse
3条回答
def expand(abandoned,seq):
    for was_abandoned,elt in zip(abandoned,seq):
        if was_abandoned:
            for _ in range(4): yield elt
        else:
            for _ in range(3): yield elt            

course=['A Race Course','B Race Course']
time=['00:00','01:00']
abandoned=[False,True]
horses=['Horsey-{0}'.format(n) for n in range(8)]
position=['1','2','3','','','','']

result=[(c,t,a,h,p) for (c,t,a),h,p in
        zip(expand(abandoned,zip(course,time,abandoned)),horses,position)]
print(result)

收益率

[('A Race Course', '00:00', False, 'Horsey-0', '1'), ('A Race Course', '00:00', False, 'Horsey-1', '2'), ('A Race Course', '00:00', False, 'Horsey-2', '3'), ('B Race Course', '01:00', True, 'Horsey-3', ''), ('B Race Course', '01:00', True, 'Horsey-4', ''), ('B Race Course', '01:00', True, 'Horsey-5', ''), ('B Race Course', '01:00', True, 'Horsey-6', '')]

您想使用^{} function来完成此操作。在

如果没有更多关于horses是什么样子的信息,我不能给你一个例子。是[H1, h2, h3, "", h5, h6, h7, h8, h9, h10, ""]?在

要开始,您需要压缩相同长度的项目:

races = zip(course, time, abandoned)

然后(取决于你不清楚的马的结构),你需要使用列表理解来为每匹马的结果附加一个比赛项目。对于您来说,首先将horses列表划分为horses_in_race列表,然后将其与zip和list comp一起使用可能会更容易。在

如果问题更完整,我可以提供更好的答案。在

>>> class s:
    courses = ["CourseX", "CourseX", "CourseY"]
    times   = ["01:00",  "02:00", "01:00"]
    abandoned = [False, False, True]
    horses = ["X1", "X2", "X3", "X4", "X5", "X6", "Y1", "Y2", "Y3", "Y4"]
    positions = ["1","2","3","1","2","3","","","",""]

>>> def races(courses, times, abandoned, horses, positions):
    z = zip(horses, positions)
    for course, time, stopped in zip(courses, times, abandoned):
        for _ in range(4 if stopped else 3):
            horse, pos = next(z)
            yield course, time, stopped, horse, pos


>>> print(*races(s.courses, s.times, s.abandoned, s.horses, s.positions), sep='\n')
('CourseX', '01:00', False, 'X1', '1')
('CourseX', '01:00', False, 'X2', '2')
('CourseX', '01:00', False, 'X3', '3')
('CourseX', '02:00', False, 'X4', '1')
('CourseX', '02:00', False, 'X5', '2')
('CourseX', '02:00', False, 'X6', '3')
('CourseY', '01:00', True, 'Y1', '')
('CourseY', '01:00', True, 'Y2', '')
('CourseY', '01:00', True, 'Y3', '')
('CourseY', '01:00', True, 'Y4', '')

相关问题 更多 >

    热门问题