Python列表转字符串优化:命令行参数分行打印的简洁实现
优化命令行参数分组打印的简洁实现
我已经有一个能运行的解决方案,但代码写得非常粗糙。这类列表转字符串的操作我一直做得不太好,这次的实现尤其拙劣,实在尴尬。现在想找个更简洁的方案,把命令行里的每个选项参数及其对应的参数分行打印。
输入示例:
python3 -O myscript.py --dates "2024-04-30" "2024-04-29" "2024-04-28" "2024-04-27" --names "johnson" "woody" "richard" "willy" -o "/home/stamos/pickle/pics/name_brainstorming"
现有代码:
sys.argv[1:] = parameter_set print("\nGenerating parameter set: ") parameter_set_string = "" first_iter = True for each in parameter_set: if each[0] == "-" and first_iter == False: print(parameter_set_string) parameter_set_string = each else: if first_iter: parameter_set_string += each first_iter = False else: parameter_set_string += ' "' + each + '" ' print(parameter_set_string)
期望输出:
Generating parameter set: --dates "2024-04-30" "2024-04-29" "2024-04-28" "2024-04-27" --names "johnson" "woody" "richard" "willy" -o "/home/stamos/pickle/pics/name_brainstorming" Generating parameter set: --dates "2024-04-26" "2024-04-25" "2024-04-24" --names "anaconda" "black mamba" "python" -o "/home/stamos/pickle/pics/name_brainstorming"
简洁实现方案
通过分组遍历的方式,把每个选项及其后续非选项参数归为一组,再格式化输出,逻辑更清晰:
print("\nGenerating parameter set: ") groups = [] current_group = [] for param in parameter_set: if param.startswith("-"): if current_group: groups.append(current_group) current_group = [param] else: current_group.append(param) # 处理最后一组 if current_group: groups.append(current_group) # 格式化打印每组 for group in groups: parts = [group[0]] + [f'"{p}"' for p in group[1:]] print(" ".join(parts))
代码说明
- 分组逻辑:遇到以
-开头的选项时,将当前已收集的参数组存入列表,然后新建组;非选项参数直接加入当前组。 - 格式化输出:每组第一个元素保留原选项名,后续参数用双引号包裹,再用空格拼接成一行打印。
- 边界处理:循环结束后主动存入最后一组,避免遗漏末尾参数。
这个实现去掉了冗余的状态标记,逻辑直观易懂,可读性和维护性更强,完全匹配你的输出需求。
内容的提问来源于stack exchange,提问作者john stamos
相关产品推荐
相关产品推荐

