使用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'