检查列表是否在列表中

时间:2019-04-03 03:11:39

标签: python

我要检查列表是否在列表中。 返回错误的结果。这是什么问题?

x

部分匹配应该正确,只要列表中的所有元素都在my_list中。

6 个答案:

答案 0 :(得分:2)

您可以使用in直接检查列表是否包含在另一个列表中:

return search_list in my_list

但是由于您还希望获得部分容纳匹配,甚至是列表容纳的列表,因此可以尝试以下操作:

def x_in_y(search_list, my_list):
    if any(isinstance(i, list) for i in search_list):
        return all([x_in_y(x,my_list) for x in search_list])
    return any([m for m in my_list if m == search_list or set(search_list) <= set(m)])

这将检查列表中的列表匹配项,嵌套列表包含项以及列表中列表的子集。

答案 1 :(得分:1)

您可以使用in关键字检查列表是否存在:

def x_in_y(search_list, my_list):
    return True if search_list in my_list else False

答案 2 :(得分:1)

您需要单独处理一维案例

def x_in_y(search_list, my_list):
    return (search_list in my_list) or any([s in my_list for s in search_list])

答案 3 :(得分:1)

数据:

search_list = [['1', '2', '3'], ['7','8','9','10'], 
               ['1','3','4','5'], ['10','11','12','13']]

w = ['1', '2', '3']  # True
a = ['1', '2']  # True
b = ['7', '8', '9', '10']  # True
f = ['1', '0']  # False
c = [['1', '3', '4', '5'], ['10', '11', '12', '13']]  # True
d = [['1', '3', '4', '4'], ['10', '11', '12', '15']]  # False

功能:
 -使用生成器理解而不是列表理解
 -下面的代码需要可哈希输入

def x_in_y(x, y):
    # check if x is a nested list
    if any(isinstance(i, list) for i in x):
        return x, all((any((set(x_).issubset(y_) for y_ in y)) for x_ in x))
    else:
        return x, any((set(x).issubset(y_) for y_ in y))
  

all():如果iterable的所有元素都为true(或者iterable为空),则返回True。
  any():如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False
  isinstance:如果x中的每个项目都是列表的实例,则返回true
  issubset:测试集合中的每个元素是否都在参数集中

结果:

print(x_in_y(w, search_list))
## (['1', '2', '3'], True)
print(x_in_y(a, search_list))
## (['1', '2'], True)
print(x_in_y(b, search_list))
## (['7', '8', '9', '10'], True)
print(x_in_y(f, search_list))
## (['1', '0'], False)
print(x_in_y(c, search_list))
## ([['1', '3', '4', '5'], ['10', '11', '12', '13']], True)
print(x_in_y(d, search_list))
## ([['1', '3', '4', '4'], ['10', '11', '12', '15']], False)

答案 4 :(得分:0)

尝试这种方式。

def x_in_y(search_list, my_list):
    return (search_list in my_list)

答案 5 :(得分:0)

此代码虽然比列表理解的行多,但在某些情况下它会更快,因为一旦找不到任何项目,它就会中断。

def x_in_y(search_list, my_list):
    for num in search_list:
        for lst in my_list:
            found=False
            if num in lst or num==lst:
                found=True
                break
        if found==False:
            return False
    return True