使用Pythonstring格式与列表

我在Python 2.6.5中构造了一个strings ,它将有不同数量的%s标记,它们与列表x的条目数相匹配。 我需要写出一个格式化的string。 以下不起作用,但表明我正在尝试做什么。 在这个例子中,有三个令牌,列表有三个条目。

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

我想输出string是:

1 BLAH 2 FOO 3 BAR

 print s % tuple(x) 

代替

 print s % (x) 

你应该看看python的格式化方法。 你可以这样定义你的格式化string:

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

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

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

为列表x每个元素创build一个占位符。 这是一个例子:

 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] 

由于我刚刚了解到这个很酷的东西(从格式string中索引到列表),我添加到这个老问题。

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

然而,我还没有想出如何做切片(在格式string'"{x[2:4]}".format... ,),并且如果有人有想法,不过我怀疑你根本做不到这一点。

这是一个有趣的问题! 使用可变长度列表的.format方法来处理这种情况的.format一种方法是使用充分利用列表解包的function。 在下面的例子中,我不使用任何奇特的格式,但可以很容易地更改以适应您的需求。

 list_1 = [1,2,3,4,5,6] list_2 = [1,2,3,4,5,6,7,8] # Create a function to easily repeat on many lists: def ListToFormattedString(alist): # Each item is right-adjusted, width=3 formatted_list = ['{:>3}' for item in alist] s = ','.join(formatted_list) 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'