对列表使用 Python 字符串格式设置

我在 Python 2.6.5中构造了一个字符串 s,它将具有不同数量的 %s标记,这些标记与列表 x中的条目数相匹配。我需要写出一个格式化的字符串。下面的代码不起作用,但指示了我正在尝试做的事情。在这个示例中,有三个 %s令牌,列表有三个条目。

s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)

我希望输出字符串为:

1 BLAH 2 FOO 3 BAR

319528 次浏览
print s % tuple(x)

而不是

print s % (x)

您应该看一下 python 的 格式方法。然后您可以像下面这样定义您的格式化字符串:

>>> s = '{0} BLAH BLAH {1} BLAH {2} BLAH BLIH BLEH'
>>> x = ['1', '2', '3']
>>> print s.format(*x)
'1 BLAH BLAH 2 BLAH 3 BLAH BLIH BLEH'

在这个 资源页之后,如果 x 的长度是变化的,我们可以使用:

', '.join(['%.2f']*len(x))

为列表 x中的每个元素创建一个占位符:

x = [1/3.0, 1/6.0, 0.678]
s = ("elements in the list are ["+', '.join(['%.2f']*len(x))+"]") % tuple(x)
print s
>>> elements in the list are [0.33, 0.17, 0.68]

因为我刚刚学到了这个很酷的东西(从一个格式字符串中索引到列表中) ,所以我要给这个老问题加点东西。

s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print (s.format (x=x))

产出:

1 BLAH 2 FOO 3 BAR

然而,我仍然没有弄清楚如何做切片(在格式字符串 '"{x[2:4]}".format...内部) ,并希望弄清楚如果有人有一个想法,但我怀疑你根本不能这样做。

这是一个有趣的问题!处理这个 用于可变长度列表的另一种方法是构建一个充分利用 .format方法并列出解包的函数。在下面的示例中,我没有使用任何花哨的格式,但是可以很容易地根据您的需要进行更改。

list_1 = [1,2,3,4,5,6]
list_2 = [1,2,3,4,5,6,7,8]


# Create a function that can apply formatting to lists of any length:
def ListToFormattedString(alist):
# Create a format spec for each item in the input `alist`.
# E.g., each item will be right-adjusted, field width=3.
format_list = ['{:>3}' for item in alist]


# Now join the format specs into a single string:
# E.g., '{:>3}, {:>3}, {:>3}' if the input list has 3 items.
s = ','.join(format_list)


# Now unpack the input list `alist` into the format string. Done!
return s.format(*alist)


# Example output:
>>>ListToFormattedString(list_1)
'  1,  2,  3,  4,  5,  6'
>>>ListToFormattedString(list_2)
'  1,  2,  3,  4,  5,  6,  7,  8'

下面是一行代码。使用 print ()格式迭代一个列表的简易答案。

这个怎么样(python 3.x) :

sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))

阅读使用 格式()的文档。

如果只是为一个字符串填充任意的值列表,您可以执行以下操作,这与@nebot 的答案相同,但是更现代和简洁一些。

>>> l = range(5)
>>> " & ".join(["{}"]*len(l)).format(*l)
'0 & 1 & 2 & 3 & 4'

如果连接在一起的数据已经是某种结构化数据,我认为最好这样做:

>>> data = {"blah": 1, "foo": 2, "bar": 3}
>>> " ".join([f"{k} {v}" for k, v in data.items()])
'blah 1 foo 2 bar 3'
x = ['1', '2', '3']
s = f"{x[0]} BLAH {x[1]} FOO {x[2]} BAR"
print(s)

输出是

1 BLAH 2 FOO 3 BAR