【发布时间】:2016-05-31 07:23:10
【问题描述】:
我有一个数据转换让我有点受阻。我无法在 Clojure 中表达自己,甚至我精通的 Python 仍然感觉很恶心。
我需要一个像这样的数据结构:
[1, 2, [3, 4], 5, 6]
生成这样的结构:
[[1, 2, 3, 5, 6]
[1, 2, 4, 5, 6]]
每个子集合创建一个新集合,其中包含迄今为止累积的项目。我只期望单层嵌套。
我的 python 尝试如下所示:
def foo(path, acc_list=[[]]):
for val in path:
if not isinstance(val, list):
for acc in acc_list:
acc.append(val)
else:
for subval in val:
new = acc_list[0][:]
new.append(subval)
acc_list.append(new)
del acc_list[0]
return acc_list
foo([1, 2, [3, 4], 5, 6])
# => [[1, 2, 3, 5, 6], [1, 2, 4, 5, 6]]
我想知道 Clojure 解决方案是什么,以及(更重要的是)导致该解决方案的想法。
更新
整数只是举例,它们也可以是关键字或字符串,不一定要排序,但显然必须保留顺序。
通过嵌套,我的意思是它不会像
[1 [2 [3 [4 5] 6] 7] 8]而是更像[1 [2 3] 4 [5] 6 [7 8 9]]- 浅。
【问题讨论】:
-
为什么结果包含 2 个列表?
标签: python clojure transformation