У меня возникли проблемы с достижением моей цели по уменьшению купонов для ставок на питоне.
Я пытаюсь сократить ряды ставок в форме 1X2 до комбинированных купонов. Поскольку строки генерируются другим программным обеспечением, они представляют собой отдельные строки, а не комбинированные, т.е. 8 игр в одном ряду = 1X21X21X, 1XX1X21X, 1X11X21X и т. д.
Лучше посмотрите на 3 строки:
1 1 1
X X X
2 X 1 <-- diff
1 1 1
X X X
2 2 2
1 1 1
X X X
Дифференциал, конечно, может быть где угодно и может быть во всех позициях.
Теперь я хочу прочитать каждую строку, а затем объединить как можно больше строк примерно так: 1,X,1X2,1,X,2,1,X (пример для трех строк выше)
Лучший вид:
1
X
1X2
1
X
2
1
X
Я попытался получить этот результат, перебирая строки и сопоставляя их одну за другой с одними и теми же строками. Но безрезультатно.
Последнее усилие привело к вложенному словарю, подобному этому:
{u'1': {u'X': {u'1': {u'1': {u'X': {u'2': {u'1': {u'X': ''}}}}},
u'X': {u'1': {u'X': {u'2': {u'1': {u'X': ''}}}}},
u'2': {u'1': {u'X': {u'2': {u'1': {u'X': ''}}}}}}}}
Но оттуда я понятия не имею, как это сделать. И это хороший путь?
Я очень благодарен за любую помощь в этом вопросе, желательно с некоторыми примерами кода. Спасибо!
Обновление, спасибо Аарону Холлу:
Мои 20 рядов:
product_list = '''2222XX12
22X2XX12
2212XX12
221XX212
221XX112
222XX212
222XX112
22XXX212
22XXX112
22X2X212
22X2X112
2X1XX212
2X1XX112
2X12X212
2X12XX12
2X12X112
2XX2X212
2XX2XX12
2XX2X112
2XXXX212
'''
Оформление букмекера:
product_list = product_list.splitlines()
betting_slip = [set(i) for i in zip(*product_list)]
Получаем один купон:
pprint(betting_slip)
[set([u'2']),
set([u'2', u'X']),
set([u'1', u'2', u'X']),
set([u'2', u'X']),
set([u'2']),
set([u'1', u'2', u'X']),
set([u'1']),
set([u'2']),
Возвращаем эти ставки обратно к одиночным рядам:
txt_sets = [set(line) for line in betting_slip]
product_list = list(itertools.product(*txt_sets))
product_list = [''.join(tuple_i) for tuple_i in product_list]
И это приводит к 36 строкам:
pprint(product_list)
[u'2X1XX112',
u'2X1XXX12',
u'2X1XX212'
...
Проблема
Но это проблема, которая у меня есть прямо сейчас. Созданный нами купон для ставок теперь содержит 36 рядов или комбинаций. Что мне нужно, так это купон/квитанции для ставок, которые содержат только те 20 строк, с которых мы начали.
Я сделал картинку, иллюстрирующую купоны для ставок: http://i.imgur.com/H5h3K4K.png
Как видите, из 20 рядов должно получиться 6 купонов для ставок, а не тот, который содержит 36 рядов.