如何使用.format将列表元素插入字符串并在循环外输出全部字符串
问题根源
你的代码逻辑存在变量覆盖的问题:new_strings是单值字符串变量,每次while循环运行时,新生成的格式化字符串会直接覆盖这个变量上一次存储的内容。等整个循环执行完,变量里只会留下最后一次赋值的结果,也就是拼接了Banana的那条字符串,放在循环外打印自然只能拿到这一条。
修正方案
你只需要提前准备一个容器(最常用的是列表),把每次循环生成的字符串都存到容器里,不要每次都覆盖同一个变量,等循环全部跑完,再在循环外统一输出容器里的所有内容即可。
基于你原有while逻辑的修正代码
fruit = ['Apple', 'Orange', 'Mango', 'Banana'] my_string = "The store is selling {}" i = 0 all_results = [] # 初始化空列表存储所有拼接结果 while i < len(fruit): current_str = my_string.format(fruit[i]) all_results.append(current_str) # 把当前结果追加到列表,不会覆盖之前的内容 i = i + 1 # 循环外统一打印所有结果 for item in all_results: print(item)
注:你原来的循环里先执行i = i + 1再取fruit[i-1]属于多余操作,直接从索引0开始取值、取值后再自增索引即可,逻辑更直观不容易出错。
更简洁的常规写法
遍历列表元素的场景优先用for循环,不需要手动维护索引变量,代码更简洁也更少出bug:
fruit = ['Apple', 'Orange', 'Mango', 'Banana'] my_string = "The store is selling {}" all_results = [] for single_fruit in fruit: all_results.append(my_string.format(single_fruit)) # 用换行符拼接所有结果后一次打印即可 print('\n'.join(all_results))
运行后就能在循环外得到你预期的4行输出。
内容的提问来源于stack exchange,提问作者swimmeryay15
相关产品推荐
相关产品推荐

