我有嵌套的字符串列表:
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"))
)
注意:在上面的示例中,mylist1
和mylist2
相同。但mylist3
与mylist1
和mylist2
不同,因为缺少空字符串和“坚果”的子列表c("nut", "")
列表中元素的顺序并不重要。我想要一个比较两个这样的列表并返回一个布尔值的函数,如果它们在忽略元素的顺序时是相等的。
基本上我的类型字符串的嵌套列表代表数学集。我想比较两个这样的嵌套列表,但由于它们代表集合,顺序并不重要。我希望得到一个布尔值(true / false)。
答案 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)