根据列表中的值生成格式字符串

时间:2019-06-05 14:07:00

标签: python string

假设我有

values = ['a', 1, 2, 3.462874271095e-13, 'c']

我想生成以下格式字符串:

"My values are: %s, %d, %d, %f, %s" 

注意:假设您不知道列表中变量的类型,它们可以按任何顺序出现。您正在尝试确定是否使用%d,%f或%s。列表中只能包含数字和字符串。如果遇到带小数位的数字,则不想用科学计数法打印。

2 个答案:

答案 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'