Как получить количество элементов в списке из функции Python - PullRequest
0 голосов
/ 27 января 2019

Моя функция возвращает список, но не может вернуть длину списка.

Когда я возвращаю сам список (прокомментированный в приведенном ниже коде), он успешен, но при попытке вернуть длину списка не удается, но обычно это работает с другими списками, с которыми я работаю ?? !!

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

def count_combinations(number, integers_available, integers):

    combination_set = []
    # count = 0

    if sum(integers) == number:
        combination_set.append(integers)
        # count += 1
    elif sum(integers) > number:
        pass
    elif integers_available == []:
        pass
    else:
        for c in count_combinations(number, integers_available[:], integers+[integers_available[0]]):
            combination_set.append(c)
            # count += 1
        for c in count_combinations(number, integers_available[1:], integers):
            combination_set.append(c)
            # count += 1

    return len(combination_set)
    # return combination_set
    # return count

# Testing the code
number = 10
integers_available = [5, 2, 3]
print(count_combinations(number, integers_available, []))

Я ожидаю, что результат будет 4, поскольку список:

[[5, 5], [5, 2, 3], [2, 2, 2, 2, 2], [2, 2, 3, 3]]

Но я получаю следующую ошибку:

Traceback (most recent call last):
  File "ask.py", line 22, in <module>
    print(count_combinations(number, integers_available, []))
  File "ask.py", line 12, in count_combinations
    for c in count_combinations(number, integers_available[:], integers+[integers_available[0]]):
  File "ask.py", line 12, in count_combinations
    for c in count_combinations(number, integers_available[:], integers+[integers_available[0]]):
TypeError: 'int' object is not iterable

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Вы используете get_combinations(number, integers_available, integers) в качестве рекурсивной функции, поэтому эта функция возвращает return len(combination_set) длину списка combination_set = []. когда вы используете эту функцию, как

for c in get_combinations(number, integers_available[:], integers + [integers_available[0]]):

, так как функция возвращает целое число, которое является длиной списка, выше для каждого цикла означает

for c in len(combination_set):

Примечание: допустим, длина составляет 4

for c in 4: # throws 'int' object is not iterable exception.

То есть ваша функция должна возвращать список, а не его длину Это должно быть return combination_set

0 голосов
/ 27 января 2019

Предположим, что число действительно, когда оно не равно 0, тогда Вы можете попробовать код ниже:

def get_combinations2(number, integers_available, integers):
     return len(integers_available)+len(integers)+1 if number != 0 else len(integers_available)+len(integers)
0 голосов
/ 27 января 2019

Ваша функция рекурсивная.Вы можете подождать, чтобы преобразовать список в длину в конце работы, например:

def get_combinations(number, integers_available, integers):

    combination_set = []
    # count = 0

    if sum(integers) == number:
        combination_set.append(integers)
        # count += 1
    elif sum(integers) > number:
        pass
    elif integers_available == []:
        pass
    else:
        for c in get_combinations(number, integers_available[:],
                                  integers + [integers_available[0]]):
            combination_set.append(c)
            # count += 1
        for c in get_combinations(number, integers_available[1:],
                                  integers):
            combination_set.append(c)
            # count += 1

    return combination_set

def count_combinations(number, integers_available, integers):
    return len(get_combinations(number, integers_available, integers))


# Testing the code
number = 10
integers_available = [5, 2, 3]
print(count_combinations(number, integers_available, []))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...