问题:将Python字符串格式化与列表一起使用
我s
在Python 2.6.5中构造了一个字符串,该字符串将具有不同数量的%s
令牌,这些令牌与list中的条目数匹配x
。我需要写出格式化的字符串。以下内容不起作用,但表示我要执行的操作。在此示例中,有三个%s
标记,并且列表具有三个条目。
s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)
我希望输出字符串为:
1 BLAH 2 FOO 3 BAR
I construct a string s
in Python 2.6.5 which will have a varying number of %s
tokens, which match the number of entries in list x
. I need to write out a formatted string. The following doesn’t work, but indicates what I’m trying to do. In this example, there are three %s
tokens and the list has three entries.
s = '%s BLAH %s FOO %s BAR'
x = ['1', '2', '3']
print s % (x)
I’d like the output string to be:
1 BLAH 2 FOO 3 BAR
回答 0
print s % tuple(x)
代替
print s % (x)
print s % tuple(x)
instead of
print s % (x)
回答 1
您应该看一下python 的format方法。然后,您可以像这样定义格式字符串:
>>> 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'
You should take a look to the format method of python. You could then define your formatting string like this :
>>> 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'
回答 2
在此资源页面之后,如果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]
Following this resource page, if the length of x is varying, we can use:
', '.join(['%.2f']*len(x))
to create a place holder for each element from the list x
. Here is the example:
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]
回答 3
这是一行代码。一个临时的答案,使用带有print()的format来迭代列表。
怎么样(Python 3.x):
sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))
在此处阅读有关使用format()的文档。
Here is a one liner. A little improvised answer using format with print() to iterate a list.
How about this (python 3.x):
sample_list = ['cat', 'dog', 'bunny', 'pig']
print("Your list of animals are: {}, {}, {} and {}".format(*sample_list))
Read the docs here on using format().
回答 4
由于我刚刚学到了这个很酷的东西(从格式字符串中索引到列表中),所以我添加了这个老问题。
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...
中),并且很想弄清楚是否有人有想法,但是我怀疑您根本无法做到这一点。
Since I just learned about this cool thing(indexing into lists from within a format string) I’m adding to this old question.
s = '{x[0]} BLAH {x[1]} FOO {x[2]} BAR'
x = ['1', '2', '3']
print (s.format (x=x))
Output:
1 BLAH 2 FOO 3 BAR
However, I still haven’t figured out how to do slicing(inside of the format string '"{x[2:4]}".format...
,) and would love to figure it out if anyone has an idea, however I suspect that you simply cannot do that.
回答 5
这是一个有趣的问题!处理可变长度列表的另一种方法是构建一个充分利用该.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'
This was a fun question! Another way to handle this for variable length lists is to build a function that takes full advantage of the .format
method and list unpacking. In the following example I don’t use any fancy formatting, but that can easily be changed to suit your needs.
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'
回答 6
与@neobot的答案相同,但更加现代和简洁。
>>> l = range(5)
>>> " & ".join(["{}"]*len(l)).format(*l)
'0 & 1 & 2 & 3 & 4'
The same as @neobot’s answer but a little more modern and succinct.
>>> l = range(5)
>>> " & ".join(["{}"]*len(l)).format(*l)
'0 & 1 & 2 & 3 & 4'
回答 7
x = ['1', '2', '3']
s = f"{x[0]} BLAH {x[1]} FOO {x[2]} BAR"
print(s)
输出是
1 BLAH 2 FOO 3 BAR
x = ['1', '2', '3']
s = f"{x[0]} BLAH {x[1]} FOO {x[2]} BAR"
print(s)
The output is
1 BLAH 2 FOO 3 BAR