Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在列表列表中查找列表_Python_List - Fatal编程技术网

Python-在列表列表中查找列表

Python-在列表列表中查找列表,python,list,Python,List,我有一个列表,其中每个列表可能具有任意长度,例如: list_of_lists = [[2, 2, 2, 3], [2, 3, 4], [2, 2, 6]] 我需要一种方法来搜索特定列表的列表。例如,contains()函数将返回下面的True: list_of_lists.contains([2, 2, 6]) 我已经看到了“内部列表”可以转换成元组的答案,但这对我没有帮助。有没有具有此功能的库?使用中的: list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6

我有一个列表,其中每个列表可能具有任意长度,例如:

list_of_lists = [[2, 2, 2, 3], [2, 3, 4], [2, 2, 6]]
我需要一种方法来搜索特定列表的列表。例如,
contains()
函数将返回下面的
True

list_of_lists.contains([2, 2, 6])
我已经看到了“内部列表”可以转换成元组的答案,但这对我没有帮助。有没有具有此功能的库?

使用中的

list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6]]

if [2,2,6] in list_of_lists:
    print("found")
else:
    print("not found")
print([2,2,6] in list_of_lists)
输出

found
not found
True
类似地,假设嵌套列表中的最后一个列表是:
[2,2,6,8]

list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6,8]]

if [2,2,6] in list_of_lists:
    print("found")
else:
    print("not found")
输出

found
not found
True
编辑

found
not found
True
在我进行此操作时,如果您想为列表的存在设置一个布尔值:

def chkList(lst):
    return True if lst in list_of_lists else False

list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6]]
print(chkList([2,2,6]))
输出

found
not found
True
中使用

list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6]]

if [2,2,6] in list_of_lists:
    print("found")
else:
    print("not found")
print([2,2,6] in list_of_lists)
或使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuu

print(list_of_lists.__contains__([2,2,6]))


(不要使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

if any(list == [2, 2, 6] for list in list_of_lists):
    #execute whatever code you want for this case

有多个答案建议使用
中的
=
查看列表是否包含元素(另一个列表)
但是,如果您不关心要比较的列表中元素的顺序,这里有一个解决方案。

import collections

# 'list_' is the list we are searching for in a bigger list 'list_of_lists'
for element in list_of_lists:
    if collections.Counter(element) == collections.Counter(list_) :
        return True
上述解决方案要求元素是可散列的

如果您发现
集合
太复杂而无法理解,您可以简单地使用
set(list)==set(element)

上述方法要求元素是可散列的。
如果元素不是可散列的,而是可排序的,您可以使用
排序(list)==排序(element)

以防需要更通用的解决方案来检查目标列表是否实际上是一个内部列表的有序子列表。诀窍是将列表转换为允许有效子字符串检查的字符串表示形式

>>> list_of_lists = [[2,2,2,3],[2,3,4],[2,2,6,8]]
>>> serialize = lambda x: ','.join(map(str,x))
>>> any(serialize([2,2,6]) in serialize(item) for item in list_of_lists)
True
>>> any(serialize([2,2,7]) in serialize(item) for item in list_of_lists)
False

请检查ipython的以下代码

In [18]: list
Out[18]: [[1, 2, 3], [4, 5, 6], [3, 2, 4]]

In [19]: def contains(sublist):
             if sublist in list:
                  return True
             else:
                  return False
   ....:             

In [20]: contains([1,2,3])
True

In [21]: contains(2)
False

In [22]: 

一个可能更有趣的例子是在列表列表中查找列表的子集。如果
列表中的最后一个列表实际上是
[2,2,6,8]
而OP仍然想找到它,该怎么办。我并不是说这就是他们想要的(根本不是),只是这是一个非常重要的例子:)@AdamSmith啊,不是真的,如果嵌套列表中的最后一个列表是
[2,2,6,8]
,那么条件将返回false。对。我提出的问题是,如果任何列表包含参数,而不仅仅是参数,那么生成的代码将返回
True
结果。这比OP想要的要高一步半,但至少很有趣:)@AdamSmith,我做了点什么3这只是
中的
(除了可能稍差之外,因为我认为list
\uuuuuuuuuuuuuuuu包含的
可以内联到C函数,而
任何函数(lst==[2,2,6]for…
不能)都可以),但它没有错,因此不值得投反对票。这只是另一种选择。大量代码产生的结果与更快、更可读、更可维护的代码相同。你仍然认为它是错误的:)@AdamSmith我以为最终的目标是在列表被包含的情况下采取一些行动,但现在我看到的问题是需要一个布尔方法来返回它是否被包含。感谢您提供有关contains的信息。因此python中的列表是不可散列的,但在本例中,“内部列表”中的项目是可散列的。这是否意味着上述代码将起作用?第二行collections.Counter(x)=collections.Counter(y)是什么意思?在代码段的其余部分中似乎没有使用这一点,因为在这里,我们不尝试对列表进行散列,而是对列表中的较小列表中的元素进行散列(在您的示例中是数字)。我添加了两个选项,以防您希望在列表中包含不可散列的其他元素(而不是
int
)。@Shanna Mae,我刚刚更新了我的答案,重复的行是一个输入错误。此外,通过
上述解决方案要求元素是可散列的。
我指的是传递给
collections.Counter()的列表元素。
方法。在我们这里的例子中,这个列表是一个整数列表,所以它可以正常工作。