我有两个清单:
l1:`a`b`c;
l2: til 20;
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个字典'd',其中包含'l1'元素作为键,'l2'元素均匀分布在它上面.像这样:
d:(`a`b`c)!(0j, 3j, 6j, 9j, 12j, 15j, 18j;1j, 4j, 7j, 10j, 13j, 16j, 19j;2j, 5j, 8j, 11j, 14j, 17j)
Run Code Online (Sandbox Code Playgroud)
元素的顺序是不相关的,我只需要它们平衡.我能够以迭代的方式实现这一点(很高兴添加代码,如果这被认为是有帮助的),但必须有更优雅的方式(可能有副词?).
它可以使用group:
q)group (count[l2]#l1)
(`a`b`c)!(0j, 3j, 6j, 9j, 12j, 15j, 18j;1j, 4j, 7j, 10j, 13j, 16j, 19j;2j, 5j, 8j, 11j, 14j, 17j)
Run Code Online (Sandbox Code Playgroud)
如果您l2不是其他内容til 20,则必须在分组后重新查找项目:
q)l2: 20#.Q.a
q)l2
"abcdefghijklmnopqrst"
q)l2 group (count[l2]#l1) // lookup the items back from l2 after grouping
(`a`b`c)!("adgjmps";"behknqt";"cfilor")
Run Code Online (Sandbox Code Playgroud)