【问题标题】:common lisp like format directive to print lists用于打印列表的通用 lisp 格式指令
【发布时间】:2016-04-19 09:42:59
【问题描述】:

免责声明如何在 python 中打印列表的问题已经讨论过多次,因此,这个问题不问如何打印列表而是是否存在打印列表的特定方式(使用格式指令)。

第一个热门搜索如何在 python 中使用format 打印列表是here,它看起来像:

print('\n'.join('{}'.format(k) for k in lst))

是要走的路。但我一直想知道是否有类似 lisp 的格式指令可以在没有详细连接操作的情况下执行此操作。例如。在common lisp 中可以简单地写:

(FORMAT T "~%~{~a~%~}" list-i-want-printed)

~{...~} 基本上意味着遍历列表

~a 基本上意味着接受一个参数并使用其(或默认)打印/到字符串指令打印它

~%换行

python中是否存在这样的格式指令?

作为一个更详尽的例子,我为什么要使用这样的指令: 假设您有 3 个要打印在彼此下方的列表。 lisp FORMAT 将允许:

(FORMAT T "~{~a~}~%~{~a~}~%~{~a~}~%" list-1 list-2 list-3)

而 python 解决方案看起来像:

print(''.join('{}'.format(k) for k in lsta) + '\n' + ''.join('{}'.format(k) for k in lstb) + '\n' + ''.join('{}'.format(k) for k in lstc))

没有那么精致。

【问题讨论】:

  • 一个简单的print(lst) 将打印一个列表,print(lsta, lstb, lstc) 将打印 3 个列表,每行一个。我想这是最接近你的 lisp 代码所做的事情,但我不知道 lisp。不清楚您希望输出的外观如何,因为您的两个 Python sn-ps 会产生完全不同的结果。
  • 这不是关于特定的输出,而是关于在格式字符串中使用打印列表指令的一般概念,以成为一个简短的语句而不是多个连接。基本上我希望能够在任意上下文中格式化列表。
  • 您可以将列表打印为单个实体,在这种情况下,您将获得其字符串表示形式,并在每个列表项的repr 之间加上括号和逗号。如果这还不够,那么恐怕您将不得不进行某种形式的循环。请注意,您可以使用sep.join(str_lst) 加入字符串列表(或其他容器),其中str_lst 是字符串列表,sep 是用于分隔str_lst 中的字符串项的字符串。
  • 当然,.join 仍然执行一个循环(实际上它执行 2 个循环:一个用于计算目标字符串的大小,一个用于构建该字符串),但这些循环以 C 速度发生,因此它们比用 Python 编写的循环要快得多。
  • FWIW,Python 提供了两个标准的“转字符串”函数:str()repr()。这些函数调用对象的__str____repr__ 方法。前者返回对象的用户友好字符串表示,后者主要供开发人员使用,它应该给出对象内容的准确表示,理想情况下可以用来重新创建对象。如果一个对象没有__str__ 方法,那么str() 将调用它的__repr__

标签: python formatting common-lisp


【解决方案1】:

我认为基本答案是“否”,但您可以稍微改进一下您的示例:

print( ' '.join(  '{}'.format(k) for k in lsta+lstb+lstc  ) )

没有换行符。如果我想在每个列表后换行,我会这样做

for lst in (lsta,lstb,lstc):
    print( ' '.join(  '{}'.format(k) for k in lst  ) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多