我有一个列表列表,例如,每个列表可以有任意长度:
list_of_lists = [[2, 2, 2, 3], [2, 3, 4], [2, 2, 6]]
我需要一种在列表列表中搜索特定列表的方法。例如,一个contains()
函数将在下面返回True
:
list_of_lists.contains([2, 2, 6])
我看到了可以将“内部列表”转换成元组的答案,但这对我没有帮助。那里有一个具有此功能的图书馆吗?
答案 0 :(得分:1)
使用in
:
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")
输出:
found
类似地,假设嵌套列表中的最后一个列表为:[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")
输出:
not found
编辑:
虽然我想这么做,但是如果您想为列表的存在提供一个布尔值:
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]))
输出:
True
答案 1 :(得分:1)
使用in
:
print([2,2,6] in list_of_lists)
<罢工>
或使用__contains__
:
print(list_of_lists.__contains__([2,2,6]))
(请勿使用__contains__
,强烈建议)
答案 2 :(得分:1)
有多个答案建议使用in
或==
来查看列表是否包含元素(另一个列表)。
但是,如果您不关心要比较的列表中元素的顺序,则可以采用以下解决方案。
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
以上解决方案要求元素是可哈希的。
如果您发现collections
太复杂而难以理解,则只需使用set(list_) == set(element)
。
以上方法要求元素是可哈希的。
如果元素不可散列而是可排序,则可以使用sorted(list_)==sorted(element)
。
答案 3 :(得分:0)
如果您喜欢这样做
if any(list == [2, 2, 6] for list in list_of_lists):
#execute whatever code you want for this case
答案 4 :(得分:0)
如果您需要更通用的解决方案,请检查您的目标列表是否实际上是内部列表之一的有序子列表。诀窍是将列表转换成字符串表示形式,从而可以进行有效的子字符串检查。
>>> 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
答案 5 :(得分:0)
请从ipython中检查以下代码
dotnet aspnet-codegenerator controller -name MyNewController -m MyModel -dc MyDbContext -outDir Controllers/