Python 中的字符串格式化[重复]

问题描述 投票:0回答:14

我想做一些类似

String.Format("[{0}, {1}, {2}]", 1, 2, 3)
的事情,它会返回:

[1, 2, 3]

如何在 Python 中执行此操作?

python python-3.x string formatting python-2.x
14个回答
76
投票

之前的答案使用了 % 格式,该格式在 Python 3.0+ 中已被淘汰。假设您使用的是 Python 2.6+,这里描述了一个更面向未来的格式化系统:

http://docs.python.org/library/string.html#formatstrings

虽然还有更高级的功能,但最简单的形式最终看起来非常接近您所写的内容:

>>> "[{0}, {1}, {2}]".format(1, 2, 3)
[1, 2, 3]

32
投票

您可以通过三种方式做到这一点:


使用Python的自动漂亮打印:

print([1, 2, 3])   # Prints [1, 2, 3]

用变量显示相同的内容:

numberList = [1, 2]
numberList.append(3)
print(numberList)   # Prints [1, 2, 3]

使用“经典”字符串替换(ala C 的 printf)。请注意此处 % 作为字符串格式说明符的不同含义,以及将列表(实际上是元组)应用于格式化字符串的 %。 (注意 % 用作算术表达式的模(余数)运算符。)

print("[%i, %i, %i]" % (1, 2, 3))

请注意,如果我们使用预定义的变量,我们需要将其转换为元组才能执行此操作:

print("[%i, %i, %i]" % tuple(numberList))

使用 Python 3 字符串格式。这在早期版本(从 2.6 开始)中仍然可用,但这是 Py 3 中的“新”方式。请注意,您可以使用位置(序数)参数,也可以使用命名参数(我已经把它放在它们的顺序相反。

print("[{0}, {1}, {2}]".format(1, 2, 3))

注意名称“一”、“二”和“三”可以是任何有意义的名称。)

print("[{one}, {two}, {three}]".format(three=3, two=2, one=1))

20
投票

您正在寻找字符串格式化,它在 python 中基于 C 中的 sprintf 函数。

print "[%s, %s, %s]" % (1, 2, 3)

如需完整参考,请查看此处: http://docs.python.org/library/stdtypes.html#string-formatting


10
投票

python 3.6

 中的 
PEP 498 添加了文字字符串插值,这基本上是
format
的缩写形式。

您现在可以执行以下操作:

f"[{1}, {2}, {3}]"

我发现有用的常见其他用途是:

pi = 3.141592653589793
today = datetime(year=2018, month=2, day=3)

num_2 = 2     # Drop assigned values in
num_3 = "3"   # Call repr(), or it's shortened form !r
padding = 5   # Control prefix padding
precision = 3 #   and precision for printing


f"""[{1},
     {num_2},
     {num_3!r},
     {pi:{padding}.{precision}},
     {today:%B %d, %Y}]"""

这将产生:

"[1,\n     2,\n     '3',\n      3.14,\n     February 03, 2018]"

8
投票

要按顺序打印元素,请使用 {} 而不指定索引

print('[{},{},{}]'.format(1,2,3))

(从 python 2.7 和 python 3.1 开始工作)


4
投票

你还没有非常值得称赞地阐述自己,但我大胆猜测这就是你正在寻找的:

foo = "Hello"
bar = "world"
baz = 2
print "%s, %s number %d" % (foo, bar, baz)

4
投票

我认为缺少这个组合:P

"[{0}, {1}, {2}]".format(*[1, 2, 3])

3
投票

你有很多解决方案:)

简单的方式(C风格):

print("[%i, %i, %i]" %(1, 2, 3))

使用str.format()

print("[{0}, {1}, {2}]", 1, 2, 3)

使用str.Template()

s = Template('[$a, $b, $c]')
print(s.substitute(a = 1, b = 2, c = 3))

您可以阅读PEP 3101 -- 高级字符串格式化


2
投票

非常简短的回答。

示例: 打印(“{:05.2f}”。格式(2.5163)) 返回 02.51

  • {} 在此设置变量
  • :开始造型
  • 0 以零开头,“ ”以空格开头
  • 5 全字符串长度(点计数,00.00 是长度 5 而不是 4)
  • .2 点后两位数,四舍五入。
  • f 代表浮动

2
投票

在回答这个问题之前,请先阅读以下几篇文章:

Python 官方文档这里

有用的文章

  • Python 字符串格式() - 这里

现在我们来回答这个问题

问题:我想做类似的事情:

String.Format("[{0}, {1}, {2}]", 1, 2, 3)
返回:

[1, 2, 3]

如何在 Python 中执行此操作?

答案

这肯定是一行代码的答案,即

print("[{0},{1},{2}]".format(1, 2, 3))

当您执行这一行代码时,将打印一个包含三个值(如

[1, 2, 3]
)的列表。我希望这非常简单且不言自明。

谢谢

塔努


2
投票

起,Python 支持文字字符串插值 [pep-498]。因此,您可以使用字符串前缀

f
进行格式化。例如:

x = 1
y = 2
z = 3
f'[{x}, {y}, {z}]'

然后产生:

>>> f'[{x}, {y}, {z}]'
'[1, 2, 3]'

在问题中的 C#(

String.Format(…)
的语言)中,由于 ,也支持 字符串插值 [microsoft-doc],例如:

int x = 1;
int y = 2;
int z = 3;
string result = $"[{x}, {y}, {z}]";

例如:

csharp> int x = 1;
csharp> int y = 2;
csharp> int z = 3;
csharp> $"[{x}, {y}, {z}]";
"[1, 2, 3]"

1
投票

如果你不知道列表中有多少项,这种方法是最通用的

>>> '[{0}]'.format(', '.join([str(i) for i in [1,2,3]]))

'[1, 2, 3]'

字符串列表更简单

>>> '[{0}]'.format(', '.join(['a','b','c']))
'[a, b, c]'

1
投票

有3种方法。

“%”运算符这是原来的方式:

x, y, z = 1, 2, 3

print("[%i, %i, %i]" % (x, y, z)) # [1, 2, 3]

“str.format()”Python 2.6:

x, y, z = 1, 2, 3

print("[{0}, {1}, {2}]".format(x, y, z)) # [1, 2, 3]

“f-strings”Python 3.6

x, y, z = 1, 2, 3

print(f'[{x}, {y}, {z}]') # [1, 2, 3]

-1
投票

您可以在多个地方获得答案,例如这里这里

在 python 中格式化字符串的方法有很多,例如:

  1. 使用
    format()
    功能,例如:
x = 'hello'
y = 'person'
xy = '{} {}'.format(x, y)
  1. 使用 f 字符串,例如:
x = 'hello'
y = 'person'
xy = f'{x} {y}'
© www.soinside.com 2019 - 2024. All rights reserved.