如何检查嵌套的字符串列表是否包含相同的元素

时间:2014-05-13 02:39:07

标签: r list

我有嵌套的字符串列表:

mylist1 <- list(
   list(c("banana"),c("banana","tomato"))
 , list(c("", "nut"), c("nut", "orange"))
   )

mylist2 <- list(
   list(c("orange","nut"), c("nut", ""))
 , list(c("tomato","banana"),c("banana"))
)

mylist3 <- list(
   list(c("orange","nut"), c("nut"))
 , list(c("tomato","banana"),c("banana"))
)

注意:在上面的示例中,mylist1mylist2相同。但mylist3mylist1mylist2不同,因为缺少空字符串和“坚果”的子列表c("nut", "")

列表中元素的顺序并不重要。我想要一个比较两个这样的列表并返回一个布尔值的函数,如果它们在忽略元素的顺序时是相等的。

基本上我的类型字符串的嵌套列表代表数学集。我想比较两个这样的嵌套列表,但由于它们代表集合,顺序并不重要。我希望得到一个布尔值(true / false)。

2 个答案:

答案 0 :(得分:1)

如果您的列表中没有重复的项目,则可以使用Set和Set Operations。 所以它会是这样的:

(set1 <-c(mylist1, NA))
(set2 <-c(mylist2, NA))
setequal(set1, set2)

答案 1 :(得分:0)

你总是可以将列表1的每个元素与第二个列表的元素进行比较,但这需要很长时间,而且可能是不可能的(On ^ 2)(它将是一个嵌套循环)  我想到的另一个选项是对两个列表进行排序,然后对它们进行比较,因为它们都是有序的,你只需要将列表1中的元素检查到列表2中的相同order元素。  理论上第二个选项会更快:(假设对列表进行排序需要nLog(n))  它将是2 * nLog(n)+ n(检查两个排序列表的元素的次数),即OnLog(n)