Steven P 发表于 2022-7-5 16:14:31

嵌套列表

下午好,提前感谢您的帮助。
 
 
我有一个嵌套列表,希望提取列表嵌套部分中的项目,但不确定如何执行。
 
 
我想没有人能告诉我该找什么?
 
 
例如,我有一个名为mylist的嵌套列表:
(列表0(项目01A项目01B项目01C)列表1(项目1A项目1B项目1C)列表2….)
 
 
我可以使用函数(nth x mylist),其中x是列表编号(1给出“list1”),但我如何从该列表中获取项目?(如第1A项或第2C项等)。
 
 
再次感谢

ronjonp 发表于 2022-7-5 16:27:35

它们是您可以使用的示例列表的结构化方式(cadr(成员:
(cadr (member "list2"
      (list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c")
          "list3" '("item3a" "item3b" "item3c")
           )
   )
)
 
如果它的结构更像这样,您可以使用(cdr(assoc:
(cdr (assoc "list2"
    '(("list1" ("item1a" "item1b" "item1c"))
      ("list2" ("item2a" "item2b" "item2c"))
      ("list3" ("item3a" "item3b" "item3c"))
   )
    )
)
 
然后您可以使用vl-some:
(vl-some '(lambda (x)
   (if (= "item2b" x)
       x
   )
   )
(cadr        (member        "list2"
                (list "list1" '("item1a" "item1b" "item1c") "list2"
                      '("item2a" "item2b" "item2c") "list3" '("item3a" "item3b" "item3c")
                     )
        )
)
)

Steven P 发表于 2022-7-5 16:37:21

这对我来说并不适用,但我将查看cadr命令,看看是否可以解决这个问题。
 
 
在上面的示例中,这是否允许您指定要返回嵌套列表中的哪一项?我看不出它是怎么做到的

ronjonp 发表于 2022-7-5 16:48:33

您列表中的数据类型是什么?也许发布实际列表?还要注意,如果这些是字符串,则函数区分大小写。

David Bethel 发表于 2022-7-5 16:52:44

您可能需要研究(原子)函数-大卫

Steven P 发表于 2022-7-5 16:59:57

你好
 
 
列表中的项目是字符串,其形式如下:
 
 
((项目1(项目1A项目2A项目3A项目4A))(项目2(项目2A))(项目3(项目3A))(项目4(项目4A))(项目5(项目5A项目5B项目5C)))
 
 
例程的前面部分组成了列表,这就是它在命令行中的显示方式)
 
 
所以在位置y的列表中寻找嵌套的列表项x。
 
 
如果我这样做(第2个mylist),它将返回“item3”-主列表名。太好了,反正我以后需要。但是看看如何从列表中选择项目1、2或3。如果有意义的话,可以把第2个命令连接起来。
 
 
CDR和CADR说他们只返回列表中的第二项?
 
 
 
 
或者我可以将嵌套列表分开,然后滚动浏览它吗
 
 
 
 
(我使用嵌套列表的原因是我不知道每次会有多少个列表,否则我会选择一组简单的列表,填充每个列表,并以更简单的方式查看它们)

ronjonp 发表于 2022-7-5 17:07:58

(cadr(成员是您的数据结构所需要的。如果还不太晚,我会将其重组为关联列表。
 
下面是一个使用两个索引号的快速示例。。虽然有很多方法可以剥这只猫的皮
(defun _getsomething (l idx1 idx2) (nth idx2 (cadr (member (nth idx1 l) l))))

(_getsomething
(list        "list1"        '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c") "list3"
'("item3a" "item3b" "item3c")
      )
2
2
)

BIGAL 发表于 2022-7-5 17:22:06

回到使用NTH,你可以在这里直接把它们放在多个层次上作为例子
 

(setq lst (list "list1" '("item1a" "item1b" "item1c") "list2" '("item2a" "item2b" "item2c")   "list3" '("item3a" "item3b" "item3c")))
(setq num (/ (length lst) 2))
(setq y 0) ;2nd item

(setq x 0)
(repeat num
(setq y 0)
(setq valname (nth x lst))
(setq x (+ x 1))
(setq val1 (nth y (nth x lst)))
(setq val2 (nth (setq y (+ y 1))(nth x lst)))
(setq val3 (nth (setq y (+ y 1))(nth x lst)))
(setq x (+ x 1))
(alert (strcat valname "\n" val1 "\n" val2 "\n" val3))
)

页: [1]
查看完整版本: 嵌套列表