列表嵌套问题
name_list = [['a','b','c'],['d','e','f'],['g','h','j'],['da','y']假如这个嵌套列表中有很多数据,我想要取'e‘这个数据,但我也不知道它存不存在,也不知道它放在那个位置,我要怎么才能判断它存不存在?怎么找到它?求大神帮助 应该没有直接可以解决的内置方法吧,应该要用自己写的方法 这个其实有点难
首先你要排除成环的可能
因为
>>> a = []
>>> b = []
>>> a.append(b)
>>> b.append(a)
>>> a
[[[...]]]
>>> b
[[[...]]]
然后递归搜索 简单粗暴的办法
>>> name_list = [['a','b','c'],['d','e','f'],['g','h','j'],['da','y']]
>>> temp = str(name_list)
>>> 'e' in temp
True
>>> 'da' in temp
True
>>> 'z' in temp
False 以下程序兼容各种数据类型查找, 如果仅仅为了查找字符串可能由更好的方式name_list = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'j'], ['da', 'y'], "b"]
def depth_find(a_list, obj, index=""):
"""
本函数取值是按照先广度查找, 后深度查找. 如果没有找到则返回None
:param a_list: 查找的列表
:param obj: 查找元素
:return: str, 用来表示索引位置. ".0.1.4"可以用a_list取到obj值
"""
try:
i = a_list.index(obj)
return index + "." + str(i)
except ValueError:
for i, value in filter(lambda x: isinstance(x, list), enumerate(a_list)):
son_index = depth_find(value, obj, index + "." + str(i))
if son_index:
return son_index
print(depth_find(name_list, "z"))
冬雪雪冬 发表于 2020-10-9 21:51
简单粗暴的办法
列表也可以转换成字符串格式吗?如果可以,用这个方法判断元素是否存在于嵌套列表中,实在太秒了 爷傲奈我何? 发表于 2020-10-9 22:27
列表也可以转换成字符串格式吗?如果可以,用这个方法判断元素是否存在于嵌套列表中,实在太秒了
的确可以判断元素是否存在,验证了下。但怎么找到这个元素的位置呢?
BSOD 发表于 2020-10-9 22:05
以下程序兼容各种数据类型查找, 如果仅仅为了查找字符串可能由更好的方式
这段代码for i, value in filter(lambda x: isinstance(x, list), enumerate(a_list)):
son_index = depth_find(value, obj, index + "." + str(i))
if son_index:
return son_index
我不是很明白它是怎么执行的,尤其是 if son_index:是怎么判断条件成立的,求教 爷傲奈我何? 发表于 2020-10-10 20:35
这段代码for i, value in filter(lambda x: isinstance(x, list), enumerate(a_list)):
...
这里判断的有两种情况:
1. 如果list深度为1, 没有找到, 返回None
2. 如果for循环没有主动返回, 表子list中不存在, 返回None
页:
[1]