我试图找出一种更干净的(Pythonic(方法来判断一个列表中的元素是否存在于另一个列表中,按顺序但不连续。例如,我可能有以下列表:
list1 = ["I", "her"]
list2 = ["I", "hate", "her", "sometimes"]
list3 = ["her", "hat", "I", "found"]
在比较 list1 和 list2 时,我想返回True
,因为"我"和"她"按该顺序存在于 list2 中,尽管不是连续的。 将 list1 与 list3 进行比较时将返回False
,因为"her"和"I"未按正确的顺序出现。
我可以编写一系列循环和 if 语句来实现这一点,但我想知道是否有更简单的内置方法来做到这一点。我尝试使用 all(( 函数:
all(i in list2 for i in list1)
这可以查找 list1 中的所有元素是否存在于 list2 中,但不考虑排序。我也尝试过使用join:
" ".join(str(i) for i in list1) in list2
仅当 list1 中的元素在 list2 中是连续的时,这将仅返回True
。
关于更简单的方法的任何想法?
只需对集合使用交集运算符:
result = bool(set(list1) & set(list2))
如果只想计算有序对,请使用 zip。
result = any([el1 == el2 for el1, el2 in zip (list1, list2)])