如何根据列表元素数量自动生成占位符完成字符串格式化
错误原因
- 缩进错误:Python要求循环内的代码必须缩进4个空格,你写的
x = " {} ".join(safari)没有放在for循环的缩进块里,直接触发语法报错。 - 方法使用错误:
join()的作用是将可迭代对象中的所有元素拼接为一个新的字符串,拼接符是调用join方法的字符串。你这里写的" {} ".join(safari)是把safari这个字符串拆成单个字符,挨个用{}拼接,完全不符合你生成占位符的需求。 - 变量未更新:你把拼接后的结果赋值给了临时变量
x,全程没有修改safari变量,到格式化的时候safari还是初始的"I saw ",没有任何占位符,自然会和列表元素数量不匹配报错。
正确实现
你不需要写循环,直接用join批量生成对应数量的占位符即可:
animals = ["dog", "cat", "mouse", "elephant", "bird", "lion", "llama", "flamingo", "cow", "whale", "shark", "fish", "bear", "pig"] # 生成和列表长度一致的占位符,用逗号分隔 placeholder = ", ".join(["{}"] * len(animals)) safari = f"I saw {placeholder}" print(safari.format(*animals))
如果只是简单拼接列表元素,不需要用到format,直接拼接效率更高:
print("I saw " + ", ".join(animals))
如果需要给每个元素加额外修饰(比如每个动物前加a ),可以用生成器表达式处理:
print("I saw " + ", ".join(f"a {animal}" for animal in animals))
内容的提问来源于stack exchange,提问作者Pythonista
相关产品推荐
相关产品推荐

