Python如何从含字符串与不同长度子列表的列表中提取元素
错误原因
你代码的问题出在两点:
- Python的
for...else语法规则是:只要for循环正常执行结束(没有被break中断),就一定会执行else块里的代码。所以不管你遍历到的dish是不是列表,只要内层循环跑完,都会执行dishes.append(dish),这就是完整子列表被额外塞进结果的直接原因。 - 逻辑顺序有误:你没有先判断
dish的类型就直接做内层遍历,如果dish是字符串,遍历会把字符串拆成单个字符,只是因为else块又把完整字符串加了回去,才没出现更混乱的输出。
修正方案
针对你当前一层嵌套的场景,逻辑非常简单:遍历原列表时先判断元素类型,如果是列表就把它包含的所有元素批量加入结果,如果是字符串这类基础元素就直接加入结果即可,修正后的代码如下:
meal = ['salad', ['coquillette', 'ratatouille', 'steak'], 'cheese', ['ice cream', 'tart', 'fruit']] dishes = [] for item in meal: if isinstance(item, list): # 用extend把列表内的所有元素逐个追加到结果 dishes.extend(item) else: # 非列表元素直接追加 dishes.append(item) print(dishes)
运行后输出完全符合预期:
['salad', 'coquillette', 'ratatouille', 'steak', 'cheese', 'ice cream', 'tart', 'fruit']
如果后续需要处理多层嵌套的列表(比如子列表里还套着子列表),可以用递归逻辑实现通用展平,上面的代码足够覆盖你当前给出的示例场景。
内容的提问来源于stack exchange,提问作者Tartinette
相关产品推荐
相关产品推荐

