Функция преобразования в однострочный список - PullRequest
0 голосов
/ 11 сентября 2010

Возможно ли преобразовать эту функцию, комбинацию понимания списка в одно понимание списка (так что keep не требуется)?

def keep(list, i, big):
    for small in list[i+1:]:
        if 0 == big % small:
            return False
    return True

multiples[:] = [n for i,n in enumerate(multiples) if keep(multiples, i, n)]

Ответы [ 3 ]

6 голосов
/ 11 сентября 2010

Я думаю, что это так:

multiples[:] = [n for i,n in enumerate(multiples) 
                       if all(n % small for small in multiples[i+1:])] 
2 голосов
/ 11 сентября 2010

multiples[:] = [n for i, n in enumerate(multiples) if 0 not in [n % other for other in multiples[i+1:]]

Advisible? Вероятно, нет.

1 голос
/ 11 сентября 2010

Прежде всего нужно научиться не использовать имена, подобные list, в своем коде. Помните также: «сначала сделай так, а потом оптимизируй». Если вы продолжите изучать что-то, вполне вероятно, что в любом случае через месяц вы больше не будете довольны своим кодом. Попробуйте сделать читабельный код. Для этого полезно, если вы можете (боже упаси!) Прочитать свой собственный код, отложив его на несколько недель.

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

...