列出格式字符串中的理解? (Python)

问题描述 投票:0回答:2

假设我有一个列表

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

有人知道有效且简洁地实现这一目标的有效方法吗?

python string list format list-comprehension
2个回答
6
投票

是的,将参数解包与“splat”运算符一起使用

*

>>> s = "'{0}'::'{1}'::'{2}' '{3}'\n"
>>> datalist = ['foo','bar','baz','fizz']
>>> s.format(*datalist)
"'foo'::'bar'::'baz' 'fizz'\n"
>>>

编辑

正如@AChampion 所指出的,您也可以只在格式字符串本身内部使用索引:

>>> "'{0[0]}'::'{0[1]}'::'{0[2]}' '{0[3]}'\n".format(datalist)
"'foo'::'bar'::'baz' 'fizz'\n"

0
投票

使用 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 
© www.soinside.com 2019 - 2024. All rights reserved.