如何仅使用car,cdr,cons和其他功能拆分列表(python)

时间:2018-10-30 17:14:58

标签: python list function lisp

我们需要能够创建一个具有1个列表作为输入的函数。我们需要从不均匀数中分离出偶数,并将它们放在单独的列表中。我们不允许列出第二个列表,只能使用递归以及car,cdr,cons,...来解决它。

这是我已经拥有的:

alias ls='ls -F'

我变成了输出:def split_list(list_a): if null(list_a): return [] elif not even(car(list_a)): return cons(car(list_a), split_list(cdr(list_a))) else: return cons(splits_lijst(cdr(list_a)), car(list_a)) print(split_list([1, 2, 3, 4]))

应为[1, 3, 4, 2]

我真的不知道如何在不列出次要清单的情况下执行此操作。

只需清楚一点,函数“ split_list”中的函数是car,cdr,cons,null和偶数。在这里,您可以看到这些功能的内容:

[1, 3][2, 4]

2 个答案:

答案 0 :(得分:2)

您需要一种在迭代一个列表时制作两个列表的方法。最好的方法是制作一个带有3个参数的函数。一个用于输入,两个用于两个输出列表,通常称为累加器。

逻辑是当您到达列表的末尾时,将返回两个累加器的列表。如果不是,则检查元素的均匀性,然后通过将其添加到偶数累加器进行递归。如果不是,则通过将元素添加到奇数累加器来递归。

答案 1 :(得分:0)

我认为这会对您有所帮助。

object["files[" + index + "]"]

下面的一个将仅使用一个附加列表(以防您不需要原始列表):

l=list(range(10))
evens=[]
odds=[]
for x in l:
    if x%2==0:
        evens.append(x)
    else:
        odds.append(x)
print(evens,odds)