Я работаю над проблемой домашней работы и имею функцию compress(S)
, которая принимает двоичную строку. Он вызывает другую функцию, count(S)
, которая возвращает число последовательных цифр в начале строки. Он рекурсивно вызывает count(S)
для всей строки и создает список из числа последовательных цифр. Например, compress('111000111')
вернется [3, 3, 3].Ошибка неупорядоченных типов при использовании функции карты
Затем вызывается другая функция, reduction(n)
, которая принимает int
и возвращает список, в котором ни одно из чисел больше заданного значения, COMPRESSED_BLOCK_SIZE
. Он также чередуется с 0s, если число должно быть разделено. Например, reduction(5)
возвращает [2, 0, 2, 0, 1], если COMPRESSED_BLOCK_SIZE
равно 2.
Это мой код.
def count(S):
if len(S) == 1:
return 1
if S[0] == S[1]:
return 1 + count(S[1:])
return 1
def reduction(n):
if n <= COMPRESSED_BLOCK_SIZE:
return [n]
return [COMPRESSED_BLOCK_SIZE] + [0] + reduction(n-COMPRESSED_BLOCK_SIZE)
def compress(S):
if S == '':
return []
values = [count(S)] + compress(S[count(S):])
red_vals = list(map(reduction, values))
return red_vals
Функция сокращения работает, но когда функция compress(S)
вызывает reduction(values)
с помощью функции карты, я получаю сообщение об ошибке: unorderable типов: список() < = Int(). Значения в списке значений - это int, поэтому я не понимаю, почему я получаю эту ошибку, если карта должна перебирать по списку int при вызове reduction
.
Спасибо!
Я использую встроенную функцию карты, чтобы вызвать «сокращение» для каждого int в моих «значениях». Он вызывается в функции сжатия. –
'map (уменьшение, значения)' собирается вернуть список результатов 'reduce()' для каждого элемента в 'values'. Это означает, что у вас будет список списков целых чисел. Вы должны сгладить результат –