假设我有一个列表
datalist
,其中有 len(datalist) = 4
。假设我希望列表中的每个元素都以这种方式表示在字符串中:
s = "'{0}'::'{1}'::'{2}' '{3}'\n".format(datalist[0], datalist[1], datalist[2], datalist[3])
我不喜欢多次输入
datalist[index]
,并且觉得应该有更有效的方法。我试过:
s = "'{0}'::'{1}'::'{2}' '{3}'\n".format(datalist[i] for i in range(4))
但这行不通:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: tuple index out of range
有人知道有效且简洁地实现这一目标的有效方法吗?
是的,将参数解包与“splat”运算符一起使用
*
:
>>> s = "'{0}'::'{1}'::'{2}' '{3}'\n"
>>> datalist = ['foo','bar','baz','fizz']
>>> s.format(*datalist)
"'foo'::'bar'::'baz' 'fizz'\n"
>>>
>>> "'{0[0]}'::'{0[1]}'::'{0[2]}' '{0[3]}'\n".format(datalist)
"'foo'::'bar'::'baz' 'fizz'\n"
使用 enumerate() 进行列表理解可能就是您正在寻找的。您不需要使用枚举引用列表长度。
_>>enumerate(datalist) 将返回一个元组,对列表项进行编号,默认从 0 开始。
datalist = ['foo','bar','baz','fizz']
[print('{}::{} '.format(index,data),end='') for index,data in enumerate(datalist)]
print() #start new line
输出:
0::foo 1::bar 2::baz 3::fizz