乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 21|回复: 15

[编程交流] 删除一对特定项目

[复制链接]

7

主题

24

帖子

17

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 06:56:44 | 显示全部楼层 |阅读模式
我需要一些代码从列表中删除2个特定的连续项。
例:从列表(a b c d e f g h)中,我需要删除a和b并获取
'(c d e f g h),但仅当b在a之后。如果a或b是列表中的独立元素,则不应删除它们。
任何帮助都将不胜感激。非常感谢。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 07:03:00 | 显示全部楼层
使用“第n步”遍历列表查找“a”If,然后获取下一个第n个If b,然后从列表中删除
 
  1. (setq mylst (list "x" "a" "b" "C" "d"))
  2. (setq numb (length mylst))
  3. (setq x 0)
  4. (repeat numb
  5. (princ (nth x mylst))
  6. (setq x (+ x 1))
  7. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:06:27 | 显示全部楼层
不指望重复元素,所以
 
编辑:如果意图是“配对后列表的其余部分”
 
  1. (Defun[color="blue"] [b]rem2rest [/b]([/color]e1 e2 lst)
  2. (mapcar '(lambda (x y)
  3.                   (if (and (eq x e1)(eq y e2))
  4.                         (setq lst (cdr (member y[b][b] (member x lst)[/b][/b])))
  5.                         )
  6.    )
  7.                          lst (cdr lst))
  8. lst
  9. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:09:20 | 显示全部楼层
小心pbe
  1. _$ (rem2 'a 'b '(c b d e a b c))
  2. (D E A B C)

 
如果我理解了OP,也许:
  1. (defun rem2 ( e1 e2 lst )
  2.    (apply 'append
  3.        (mapcar
  4.            (function
  5.                (lambda ( a b c )
  6.                    (if
  7.                        (not
  8.                            (or (and (equal a e1) (equal b e2))
  9.                                (and (equal b e1) (equal c e2))
  10.                            )
  11.                        )
  12.                        (list b)
  13.                    )
  14.                )
  15.            )
  16.            (cons nil lst)
  17.            lst
  18.            (append (cdr lst) '(()))
  19.        )
  20.    )
  21. )
  1. _$ (rem2 'a 'b '(c b d e a b c))
  2. (C B D E C)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:16:23 | 显示全部楼层
 
 
现在,你是对的“从列表中删除一对特定项目”。。我认为这是配对后的列表中的其余部分
 
快速修复
 
  1. (Defun rem2pBe (e1 e2 lst / l lst l2)
  2. [color="blue"](while (and (setq x (car lst))(setq b (cdr lst))(null l2))
  3.         (setq y (car b))
  4.                 (if (and (eq x e1)(eq y e2))
  5.                     (setq l2 (append (reverse l)
  6.                        (cdr (member y (member x lst)))) l3 l2)
  7.                   (setq l (cons x l)))
  8.              (setq lst b)
  9. )[/color]
  10. [color="red"] [b] (if (> (length lst) 1) (rem2pBe e1 e2 l2) l3)[/b][/color]
  11. )

 
编辑:递归版本
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:20:19 | 显示全部楼层
小心pBe。。。
 
抱歉
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:21:17 | 显示全部楼层
 
不用担心,李,现在我坚信“欲速则不达”。我会关注并重新发布代码
 
编辑:差不多了。现在我只需要找出重复对。。。。
编辑:代码更新(递归)
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 07:26:05 | 显示全部楼层
  1. 7
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:31:41 | 显示全部楼层
很好Stefan
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-6 07:33:17 | 显示全部楼层
谢谢你,李
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 10:30 , Processed in 0.355027 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表