Разбить массив на меньшие массивы, используя несколько условий - PullRequest
0 голосов
/ 04 марта 2012

Задача состоит в том, чтобы загрузить файл, содержащий несколько вопросов с разным количеством ответов, и первый из перечисленных ответов всегда является правильным

например:

Who is Jane?
Girl
Boy
Both
Why are we here?
Because
For fun

Так что я подумалЯ буду читать строки в массив, но в конце мне нужно будет уметь перетасовывать ответы на каждый вопрос (и каким-то образом отслеживать правильный), а затем перетасовывать вопросы также.

Так что еслия прочитал строки в массив, это выглядело бы так:

a = ['Who is Jane?', 'Girl', 'Boy', 'Both', 'Why are we here?', 'Because', 'For fun']

, и теперь я думаю, что для того, что я должен сделать, было бы лучше разделить массивы на более мелкие, содержащие всегда вопрос и все егоответы.Так что у меня было бы что-то вроде

test = [['Who is Jane?', 'Girl', 'Boy', 'Both'], ['Why are we here?', 'Because', 'For fun']]

Кто-нибудь знает, как я могу это сделать?Я знаю, что для доступа к знаку вопроса вы можете использовать a[0][-1], и это даст вам знак вопроса от 'Who is Jane'.

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

Это моя реализация, может быть, ваша лучше.

>>> a = ['Who is Jane?', 'Girl', 'Boy', 'Both', 'Why are we here?', 'Because', 'For fun']
>>>
>>> def fun(x):
...   y = []
...   for i in x:
...     if i.endswith('?') and y:
...       yield y
...       y = []
...     y.append(i)
...   else:
...     yield y
...
>>> list(fun(a))
[['Who is Jane?', 'Girl', 'Boy', 'Both'], ['Why are we here?', 'Because', 'For fun']]
0 голосов
/ 04 марта 2012

Вот схема одного из возможных алгоритмов, при условии, что lines содержит строки из текстового файла, и они были соответствующим образом обработаны:

result = []
group = [lines[0]]

for line in <lines from the second element to the last>:
    if <line ends with a question mark>:
        # append group to result
        # reset group to an empty list

    # append line to group

Идея состоит в том, чтобы просто перебирать список строксоздайте новый список всякий раз, когда возникает вопрос, и добавляйте предыдущий список к общему результату.


В зависимости от курса, который вы выбираете, более важно улучшить свои навыки решения проблем (например, найтиалгоритм как выше), чем выучить Python (или любой другой язык) отлично.

...