Как я могу заставить эту рекурсивную функцию Python возвратить плоский список?

Я думаю, в значительной степени это потому, что ваш драйвер (ChromeDriver?) должен отличаться для разных ОС.

Вы можете скачать драйвер с https://sites.google.com/a/chromium.org/chromedriver/downloads и попробовать еще раз! Пожалуйста, напишите об ошибке в следующий раз, чтобы избежать угадывания игр!

13
задан Patrick McElhaney 23 February 2009 в 15:31
поделиться

4 ответа

def prime_factors(n):
  for i in range(2,n):
    if n % i == 0:
      return [i] + prime_factors(n / i)
  return [n]
22
ответ дан 1 December 2019 в 17:59
поделиться
def prime_factors(n):
    for i in range(2,n):
        if n % i == 0:
           yield i
           for p in prime_factors(n / i):
               yield p
           return
    yield n

Пример:

>>> tuple(prime_factors(100))
(2, 2, 5, 5)
9
ответ дан 1 December 2019 в 17:59
поделиться

Не изменяя исходную функцию, от Приемов Python:

def flatten(x):
    """flatten(sequence) -> list

    Returns a single, flat list which contains all elements retrieved
    from the sequence and all recursively contained sub-sequences
    (iterables).

    Examples:
    >>> [1, 2, [3,4], (5,6)]
    [1, 2, [3, 4], (5, 6)]
    >>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, MyVector(8,9,10)])
    [1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]"""

    result = []
    for el in x:
        #if isinstance(el, (list, tuple)):
        if hasattr(el, "__iter__") and not isinstance(el, basestring):
            result.extend(flatten(el))
        else:
            result.append(el)
    return result
7
ответ дан 1 December 2019 в 17:59
поделиться

liw.fi предлагается в комментарии:

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

Вот реализация предложения liw.fi.

def prime_factors(n, factors=None):
    if factors is None:
        factors = []
    for i in range(2,n):
        if n % i == 0:
            factors.append(i)
            return prime_factors(n / i, factors)
    factors.append(n)
    return factors
5
ответ дан 1 December 2019 в 17:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: