new_list = []
def array_to_list(arr):
for i in arr:
if isinstance(i,list) or isinstance(i,array.array):
array_to_list(arr)
else:
new_list.append(i)
a = arr.array('d', [1.1, 3.5, 4.5])
array_to_list(a)
print(new_list)
def num_sub_array(array):
if not array:
return []
return [array[i:] for i in range(len(array))] + num_sub_array(array[:-1])
print(sorted(num_sub_array([1, 2, 3, 4])))
def num_sub_array(array):
return [
array[i:j]
for i in range(len(array))
for j in range(i + 1, len(array) + 1)
]
print(sorted(num_sub_array([1, 2, 3, 4])))
您有一个数组作为输入,希望返回一个包含该数组中所有值的列表,最好使用递归函数
我想你想要这个:
最后一行将打印列出的阵列
您的代码似乎生成以下内容,以生成非空
array
的所有子序列:array
(也就是说,包括array
中的第一项和最后一项的所有子序列)array[1:]
的所有子序列(即,所有不但的子序列包括array
中的第一项)array[:-1]
的所有子序列(即,所有不但的子序列包括array
中的最后一项)因此,复制的来源是明确的:任何在
array
中既没有第一项也没有最后一项的子序列都将被计数两次(在任何给定的调用中,这意味着array
越长,可以获得的副本就越多)希望解决方案也很清楚;删除#1(下面将介绍它),然后
解决方案1。强力递归并删除重复项
您可以使用
set
消除重复。但是您不能对
list
进行set
,因为list
是不可散列的。为了提高效率,您可以先收集索引对,然后切片:
输出:
解决方案2。无冗余递归
输出:
实际上,解决方案2的
num_sub_array
有一个尾部递归。所以您可以将其更改为循环解决方案3。循环
输出:
我用
sorted
来比较两种方法。这是没有必要的相关问题 更多 >
编程相关推荐