2015-11-09 2 views
-2

Я борюсь с этой проблемой рекурсии. Любая помощь будет принята с благодарностью. Напишите функцию с именем ясно, что принимает один аргумент, кортеж любой длины, и возвращает кортеж той же длины с каждым элементом, установленным в 0.Рекурсия и кортежи Python

Вот мой текущий код:

def clear(tup): 
    if len(tup) == 0: 
     return tup 
    else: 
     tup[0] = 0 
     return clear(tup - tup[0]) + tup[0] 
+0

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. – Prune

+0

так что не так с вашим текущим кодом –

+0

Я не знаю, почему я спросил ?? @JoranBeasley – ryanturf

ответ

1

Проблема может быть решена без рекурсии:

def clear(tup): 
    return (0,) * len(tup) 

Однако, если вы действительно хотите сделать это с помощью рекурсии:

def clear(tup): 
    if not tup: 
     return() 
    return((0,) + clear(tup[1:])) 

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

+0

Спасибо! Я никогда не думал о создании нового кортежа, но это имеет смысл. – ryanturf

+0

это не работает для '[1,2, [3,4]]', поскольку Im уверен, что ожидаемый результат будет '[0,0, [0,0]]' (т. Е. Я думаю, что рекурсия для глубины список ... не только элементы в списке ...) –

+0

Joran, заявление о проблеме заключалось в том, чтобы принять кортеж и вернуть кортеж той же длины. Не упоминается, что такое подэлементы кортежа. –

4
def clear(tup): 
    return tuple(0 if not isinstance(e,(list,tuple)) else clear(e) for e in tup) 

это может сделать больше смысла для проверки, чтобы проверить наличие Iterable подэлемента

if isinstance(e, collections.Iterable) 

Я думаю ...

+1

, это рекурсивно ... –

+1

@ Джоран Бисли, посмотрите на это ** еще ясно (e) ** ближе к концу. – Prune

+0

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

Смежные вопросы