我要检查列表是否在列表中。 返回错误的结果。这是什么问题?
x
部分匹配应该正确,只要列表中的所有元素都在my_list中。
答案 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