2 python tuples list-comprehension map
我有几个列表,我想要一起映射,但我不能完全了解如何做到这一点.
我正在抓一个赛马结果的现场直播.如果比赛被放弃,饲料仅列出一次和三匹马及其位置(前三名)或四匹马和空白(即"")位置的饲料/时间.这些是我的名单:
course, time, abandoned, horses, position
Run Code Online (Sandbox Code Playgroud)
列表是有序的.
course
,time
并且abandoned
所有元素的数量都完全相同(被放弃的是一个布尔列表,真正意味着种族被抛弃).
horses
是(3*未弃置的种族数)+(4*被遗弃的种族数)马的列表.
position
是马匹的位置列表.如果比赛被放弃,则位置为"",否则为"1","2","3"(弦!).
示例列表:
没有种族被遗弃的地方
course = ["Course A", "Course A", "Course B"] #there were two races at course A
times = ["00:00", "01:00", "15:00"] #Race 1 at Course A was at 00:00, race 2 at course A was at 01:00
horses = ["HorseA 1", "HorseA 2", "HorseA 3", "HorseA 4", "HorseA 5", "HorseA 6", "HorseB 1", "HorseB 2", "HorseB 3"] #There are three horses per race
positions = ["1","2","3","1","2","3","1","2","3"]
Run Code Online (Sandbox Code Playgroud)
因此,在00:00比赛的A球场,"HorseA 1"排在第1位,"HorseA 2"排在第2位,"HorseA 3"排在第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","","","",""]
Run Code Online (Sandbox Code Playgroud)
所以,CourseX有两场比赛,但是在CourseY的比赛被放弃了.
我最终想要的是一个像这样的元组列表:
[(A Race Course, 00:00, False, Horsey, 1), (A Race Course, 00:00, False, Horsey 2, 2) ... ]
Run Code Online (Sandbox Code Playgroud)
我不知道我怎么能这样做,建议?
干杯,
皮特
>>> 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', '')
Run Code Online (Sandbox Code Playgroud)