tm20038175 发表于 2011-7-2 12:47:43

三个数目一样的list函数合并问题。。。。

例如我有三个list表,{x1 x2…}{y1 y2…}{z1 z2…},如何合并为一个表{(x1 y1 z1)(x2 y2 z2) …}

caoyin 发表于 2011-7-2 13:00:24

(list '(1 2) '(3 4) '(5 6))->((1 2) (3 4) (5 6))
(append '(1 2) '(3 4) '(5 6))->((1 2 3 4 5 6))

zhynt 发表于 2011-7-2 13:20:27


(defun c:aaa ()
(setq aaa '(x1 x2 x3 x4))
(setq bbb '(y1 y2 y3 y4))
(setq ccc '(z1 z2 z3 z4))
(setq        n   (length aaa)
        m   0
        lst '()
)
(while (/= n m)
    (setq lst1 (list (nth m aaa) (nth m bbb) (nth m ccc)))
    (setq lst (cons lst1 lst))
    (setq m (1+ m))
)
(reverse lst)
)

tm20038175 发表于 2011-7-2 13:20:39

如果是把几个表中相同位置的元素提取合为一项呢?

tm20038175 发表于 2011-7-2 13:21:39

回复 zhynt 的帖子

哈哈,谢谢,就是这个效果!…………

zhynt 发表于 2011-7-2 13:24:09

回复 tm20038175 的帖子

还可以加上三个表长度的判段,取最短表的长度为n

caoyin 发表于 2011-7-2 15:18:54

本帖最后由 caoyin 于 2011-7-2 15:32 编辑

;;这个方法无需判断各个表长度,自动取短
(mapcar '(lambda (x y z) (list x y z))
'(11 12 13 14 15)
'(21 22 23 24)
'(31 32 33 34 35 45 55)
)
->
((11 21 31) (12 22 32) (13 23 33) (14 24 34))

--------------------------------------------------------------------
;;
(setq A '((11 21 31) (12 22 32) (13 23 33) (14 24 34)))
(mapcar 'car A)->(11 12 13 14)
(mapcar 'cadr A)->(21 22 23 24)
(mapcar 'caddr A)->(31 32 33 34)
(mapcar 'last A)->(31 32 33 34)

highflybir 发表于 2011-7-2 15:47:37

本帖最后由 highflybir 于 2011-7-2 15:50 编辑


(defun trp (m)
(apply 'mapcar (cons 'list m))
)

例如
Command: (trp '((x1 x2 x3 x4 x5) (y1 y2 y3 y4 y5) (z1 z2 z3 z4 z5)))
((X1 Y1 Z1) (X2 Y2 Z2) (X3 Y3 Z3) (X4 Y4 Z4) (X5 Y5 Z5))


tm20038175 发表于 2011-7-2 16:12:26

回复 caoyin 的帖子

高!太高 !言简意赅,大师级人物才写的出来啊。。。。。
赞一个!………

caoyin 发表于 2011-7-2 16:29:29

回复 tm20038175 的帖子

8楼highflybir 版主才是大师级的
页: [1] 2
查看完整版本: 三个数目一样的list函数合并问题。。。。