python - 在嵌套列表中查找索引
问题描述
我正在尝试创建一个函数,它将一个嵌套列表和一个项目作为输入,并返回一个索引列表。例如list = [0, 5, [6, 8, [7, 3, 6]], 9, 10]
and item = 7
应该返回[2, 2, 0]
,因为list[2][2][0] = 7
我的代码应该可以工作,因为我可以打印欲望输出,但是当我运行它时它返回无。
def find_item(list_input, item, current):
if list_input == item:
print(current) ## this does give the desires output, but the function should return not print
return current
else:
if isinstance(list_input, list):
for j in range(len(list_input)):
current.append(j)
find_item(list_input[j], item, current)
del current[-1]
我在这里俯瞰什么?
解决方案
当有人在递归函数for
中间插入一个循环时,我总是很困扰!这是解决此问题的另一种方法:
def find_item(list_input, item, index=0):
if list_input:
head, *tail = list_input
if head == item:
return [index]
if isinstance(head, list):
if result := find_item(head, item):
return [index] + result
return find_item(tail, item, index + 1)
return list_input
list_input = [0, 5, [6, 8, [7, 3, 1]], 9, 10]
print(find_item(list_input, 7))
此解决方案不需要明确的第三个参数。list
并在找不到项目时返回空,而不是None
. 注意新海象运算符的使用:=
if result := find_item(head, item):
如果这是一个问题,请改为:
result = find_item(head, item)
if result:
推荐阅读
- python - 使 Flask 路线“通过”到另一条 Flask 路线的最佳方法是什么?
- python - hostname -f 和 socket.getfqdn() 返回不同
- naudio - naudio可能不支持Conexant SmartAudio HD声卡驱动?为什么?
- java - spring 云网关中的身份验证
- python - REST请求中基于python证书的身份验证
- vba - 更改工作表时相交方法错误
- git - 如何将 Git 提交移动到另一个分支并在原始分支中删除它们?
- node.js - 使用 Sequelize.js 进入包含模型
- java - 如果Java的构造函数中不存在,则忽略Json属性
- javascript - 如何使用 java 脚本实时过滤方法过滤数据库获取的值?