Python - отображение списка - PullRequest
2 голосов
/ 19 октября 2010

У меня есть несколько списков, которые я хотел бы отобразить вместе, но я не могу обдумать, как это сделать.

Я перебираю в прямом эфире результаты скачек.В фиде указывается только курс / время один раз и три лошади и их позиции (верхние три) ИЛИ четыре лошади и пустые (то есть "") позиции, ЕСЛИ гонка была оставлена.Вот списки, которые у меня есть:

course, time, abandoned, horses, position

Списки расположены по порядку.

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

Итак, на курсе А в гонке в 00:00 «HorseA 1» заняла 1-е место, «HorseA 2» заняла 2-е место, а «HorseA 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) ... ]

Я не уверен, как мне это сделать, предложения?

Ура,

Пит

Ответы [ 3 ]

5 голосов
/ 19 октября 2010
>>> 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', '')
2 голосов
/ 19 октября 2010
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)

выходы

[('Ипподром', '00: 00 ', Ложь, «Horsey-0», «1»), («Ипподром», '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', '')]

2 голосов
/ 19 октября 2010

Вы хотите использовать для этого функцию zip() .

Я не могу привести вам пример, не имея чуть больше информации о том, как выглядит horses.Это [H1, h2, h3, "", h5, h6, h7, h8, h9, h10, ""]?

Чтобы начать, вы должны сжать элементы одинаковой длины:

races = zip(course, time, abandoned)

Затем (в зависимости от вашей неясной структуры лошадей) выВы захотите использовать понимание списка, чтобы добавить один элемент гонки к каждому результату лошади.Возможно, вам будет проще сначала разбить список лошадей на список horses_in_race, а затем использовать его с вашим zip и списком.

Если бы вопрос был более полным, я мог бы дать лучший ответ.

...