【发布时间】: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