以前我有一个关于查找元素是否存在于嵌套列表中的问题,并在下面的链接中得到了响应。
Search of Element inside a multi-dimensional List Not Working. Any Clue
想知道函数是否也可以发出一个值,该值表示该元素存在于哪个子列表中?下面的代码说明元素是否退出:
def in_nested_list(item, x):
if not isinstance(x, list):
return x == item
else:
return any(in_nested_list(item, ix) for ix in x)
list1 = []
list1.append([['red'], ['blue'], ['bla']])
print list1
list1.append([['hello'], ['blue'], ['bla']])
print list1
if in_nested_list('hello', list1):
print "Found Hello"
else:
print "Not Found Hello"
我想知道如何更改该功能,以便说明该元素退出哪个子列表,以便我可以根据特定的子列表追加更多数据。
一个。从上面的例子中,if条件将打印出Hello。但是,如果它也返回或保存一个输出变量,如上面的情况中sublist_no,即子列表1,那么我可以附加更多的变量。
例如:现在输出返回TRUE,子列表号也返回1,这样我可以在调用函数后执行以下过程。
list1[sublist_no].append(['Bug'])
假如我搜索红色元素,输出将为TRUE,sublist_no为0,这样我就可以将更多变量附加到第一个列表。
list1[sublist_no].append('[Rasberry]') # i.e. onto the first sub-list.
以上查询的任何线索?请注意你的评论...
答案 0 :(得分:0)
由于您的原始函数可以处理比列表列表更复杂的嵌套结构,因此嵌套的“index
”函数也应如此:
def in_nested_list(item, x):
if item == x:
return []
if isinstance(x, list):
for i, ix in enumerate(x):
r = in_nested_list(item, ix)
if r != -1:
return [i] + r # highest level index plus path in sublist
return -1 # not found in any (nested) sublist
# if not found at all: return -1
# if item == x: return []
# else: return [a, b, c] such that item == x[a][b][c]
> in_nested_list(3, [[1, 2], [3, 4]])
[1, 0]
> in_nested_list(3, [[1, 2], [[5, 3], 4]])
[1, 0, 1]
> in_nested_list(3, 3)
[]
> in_nested_list(3, [1, 2])
# -1
这允许您在您选择的任何嵌套级别附加内容。至于你的问题,简单结构中子列表的索引是in_nested_list(...)[0]
(如果存在,否则会引发错误)。
答案 1 :(得分:0)
我利用杠杆来修改你的功能。
def in_nested(item, container):
if not isinstance(container, list):
raise TypeError
for elem in container:
if isinstance(elem, list):
found = in_nested(item, elem)
if not found:
pass
elif isinstance(found, bool):
# Item is present in this list
return elem
# List containing item is present in this container
# Comment above return to use it.
return container
else:
# Return the deepest list and not the most outer list containing it.
return found
else:
return item == elem
_input = [[['red'], ['blue'], ['bla']], [['hello'], ['blue'], ['bla']]]
out = in_nested('hello', _input)
if out:
print "Found Hello", out
else:
print "Not Found Hello"
out.append('new')
print 'Added new to original input', _input
out = in_nested('Hello', _input) # hello with capital H
if out:
print "Found Hello", out
else:
print "Not Found Hello"
# Prints:
# Found Hello ['hello']
# Added new to original input [[['red'], ['blue'], ['bla']], [['hello', 'new'], ['blue'], ['bla']]]
# Not Found Hello
注意:如果项目存在,它会为您提供目标列表本身无。您不必再次找到该列表。只需追加结果即可。