假设我有
values = ['a', 1, 2, 3.462874271095e-13, 'c']
我想生成以下格式字符串:
"My values are: %s, %d, %d, %f, %s"
注意:假设您不知道列表中变量的类型,它们可以按任何顺序出现。您正在尝试确定是否使用%d,%f或%s。列表中只能包含数字和字符串。如果遇到带小数位的数字,则不想用科学计数法打印。
答案 0 :(得分:4)
formats = {
int: "%d",
float: "%f",
str: "%s",
}
values = ['a', 1, 2, 3.462874271095e-13, 'c']
generated = "My values are: " + ", ".join(formats[type(v)] for v in values)
答案 1 :(得分:1)
我们需要将每种可能的值类型映射到其对应的格式通配符。之后,只需按预期格式生成字符串即可。
wildcards = {
str: '%s',
int: '%d',
float: '%f',
}
values = ['a', 1, 2, 3.462874271095e-13, 'c']
equiv = (wildcards[type(x)] for x in values)
'My values are: ' + ', '.join(equiv)
=> 'My values are: %s, %d, %d, %f, %s'