Python中使用if语句打印含字符串与整数的二维数组
解决二维数组混合类型的格式化输出问题
我明白你的需求——要处理包含字符串和整数的二维数组,得先判断每个元素的类型,避免给字符串用{:o}格式化导致报错。其实列表推导式完全可以做到单独检查每个元素,可能之前你没找到正确的写法,我来给你演示两种可行的方案:
方案一:嵌套列表推导式(简洁版)
这种方式既保持了列表推导式的简洁性,又能对每个元素做类型判断:
original_array = [['s', 9], ['abc', 64], ['x', 123]] formatted_array = [ [item if isinstance(item, str) else f"{item:o}" for item in row] for row in original_array ] print(formatted_array)
这段代码会遍历原数组的每一行,再遍历行内的每个元素:如果是字符串就直接保留,是整数就用{:o}转成八进制字符串。输出结果会是:
[['s', '11'], ['abc', '100'], ['x', '173']]
方案二:嵌套循环(更直观,适合调试)
如果你觉得列表推导式可读性稍差,也可以用嵌套循环来逐个处理元素,逻辑更清晰:
original_array = [['s', 9], ['abc', 64], ['x', 123]] formatted_array = [] for row in original_array: new_row = [] for item in row: if isinstance(item, int): new_row.append(f"{item:o}") else: new_row.append(item) formatted_array.append(new_row) print(formatted_array)
这个方案和上面的效果完全一样,只是把推导式展开成了循环,方便你在处理复杂逻辑时添加调试语句。
额外提示:打印成原数组风格格式
如果你想直接打印成和原数组结构一致的格式(而非转成字符串后的数组),可以用逐元素格式化打印的方式:
original_array = [['s', 9], ['abc', 64], ['x', 123]] print("[", end="") for i, row in enumerate(original_array): print("[", end="") for j, item in enumerate(row): output = f"'{item}'" if isinstance(item, str) else f"'{item:o}'" print(output, end="") if j != len(row)-1: print(", ", end="") print("]", end="") if i != len(original_array)-1: print(", ", end="") print("]")
输出会是:
[['s', '11'], ['abc', '100'], ['x', '173']]
这样就能完美匹配你想要的输出格式啦。
内容的提问来源于stack exchange,提问作者Wizard
相关产品推荐
相关产品推荐

