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()的列表元素。
方法。在我们这里的例子中,这个列表是一个整数列表,所以它可以正常工作。