python - Python中嵌套不规则列表(不同的子列表长度和对象类型)的整数最大值
问题描述
考虑一下列表:
assigned = [['A',[4, 5, 6]],['B',[7, 8, 9]],['D',[2,3]],['C',[14]]]
我希望重试子列表中整数的最大值。在本例中,它将是 14。
我的第一步是整理清单:
def flattenToMax(x):
if isinstance(x,list):
return [a for i in x for a in flattenToMax(i)]
else:
return [x]
结果是:
['A', 4, 5, 6, 'B', 7, 8, 9, 'D', 2, 3, 'C', 14]
然后我做了:
maxNum = (max([x for x in toMax if isinstance(x,int)]))
输出是我的预期结果 14。我问,我怎样才能将这两个步骤组合成一个函数?
解决方案
有多种方法可以做到这一点。从我得到你的问题是你不能将此部分添加到你的函数中,因为它是一个递归函数:
maxNum = (max([x for x in toMax if isinstance(x,int)]))
这是一个关于如何在递归函数中拟合最大值部分的示例(提示:不使用实际max()
函数,但也通过递归计算最大值)
assigned = [['A',[4, 5, 6]],['B',[7, 8, 9]],['D',[2,3]],['C',[14]]]
def recursive_max(a, best=None):
if isinstance(a, list):
for i in a:
best = recursive_max(i, best)
return best
else:
return best if not isinstance(a, int) else (a if best is None or a > best else best)
print(recursive_max(assigned))
14
推荐阅读
- python - 如何在 CountVectorizer 中对句子应用权重(计算每个句子标记数次)
- javascript - 在 Cypress 内的转译 Vue 组件中加载 CSS 样式表
- javascript - 调整文本大小以适应可扩展内容可编辑?
- java - 从一个jsp中获取一个字符串来创建另一个jsp
- python - 使用多循环和 ET 在 Python 中解析 XML
- python - 为什么我们把整数放在第三位?
- java - Java/JTable - 改变 JTable 滚动条的大小
- encryption - 在经典 ASP 中验证 Stripe Webhook 签名
- xpath - xpath 查找前一个元素
- php - 生成为 Laravel 作业队列创建表的迁移?