【问题标题】:List comprehension in format string? (Python)以格式字符串列出理解? (Python)
【发布时间】:2018-02-01 13:56:50
【问题描述】:

假设我有一个datalistlen(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


    【解决方案1】:

    是的,使用argument unpacking 和“splat”运算符*

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

    Edit

    正如@AChampion 所指出的,您也可以在格式字符串本身内使用索引:
    >>> "'{0[0]}'::'{0[1]}'::'{0[2]}' '{0[3]}'\n".format(datalist)
    "'foo'::'bar'::'baz' 'fizz'\n"
    

    【讨论】:

    • @Sandi 是的,我已经链接到相关文档。
    • 你也可以只索引格式字符串"'{0[0]}'::'{0[1]}'::'{0[2]}' '{0[3]}'\n".format(datalist)
    • @Sandi 阅读this question的答案
    • 要使这种方法起作用,我必须知道列表中有多少项。如果我事先不知道列表中有多少项怎么办?
    • @kronosjt 这完全取决于您要完成的工作。你想构造什么样的字符串?
    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2023-03-30
    • 2012-03-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多