【问题标题】:python how to print list of strings with double quotespython如何打印带双引号的字符串列表
【发布时间】:2016-07-17 19:21:25
【问题描述】:

我有一个列表,即

my_list = ['a', 'b', 'c', 'd','e','f']

我想以竖线或逗号分隔的格式打印出来,但是因为我的一些列表对象可以有逗号或竖线,所以我想在打印时将双引号括在每个对象周围

即输出应该是

"a"|"b"|"c"|"d"|"e"|"f" rather than a|b|c|d|e|f

我无法在我的 python 版本上使用格式

【问题讨论】:

  • print('"{}"'.format(mystring))

标签: python list printing delimiter quote


【解决方案1】:

创建一个格式化每个元素的生成器,然后将其解压缩并使用自定义分隔符。如果您使用的是 Python 2,请先使用import print() 函数(这也可以在 Python 3 中安全地完成):

>>> from __future__ import print_function
>>> print(*('"{}"'.format(item) for item in my_list), sep='|')
"a"|"b"|"c"|"d"|"e"|"f"

【讨论】:

  • @shecode 答案具有 Python 3 语法(print 是一个函数)。如果您使用的是 Python 2,则可以在文件顶部执行 from __future__ import print_function 以获得该行为。
  • 无法转义项目中的双引号。
  • @StumpyJoePete - OP 说他们的对象可以有逗号或管道,而不是它们可以包含双引号,所以我看不出这与手头的任务有什么关系。
  • 如果你的序列化方案是“用特殊字符(或字符序列)连接事物,并希望这个特殊字符不会出现在任何项目中”,那么你的序列化方案就有缺陷。 OP 似乎最初选择了管道或逗号,意识到他们的项目有时包含这些,然后要求使用两者的方案(这不能解决问题)。
  • @StumpyJoePete - 除非元素使用双引号 - 如果为真,可能会在问题中提到,因为它提到了可能出现的其他字符,因此不能用作分隔符- 这确实解决了问题。它不能解决你想象的问题,但我回答的不是那个。
【解决方案2】:
>>> print '"' + '"|"'.join(my_list) + '"'
"a"|"b"|"c"|"d"|"e"|"f"

【讨论】:

  • 工作正常,但似乎不是很pythonic。
  • 1.为什么它不是pythonic? 2. 我怀疑这是给出的解决方案中最有效的。
  • 我倾向于支持'"{}"'.format(...) 而不是'"' + ... + '"'。有大量这样的嵌套/交替引号不太可读。
  • @univerio - 我可以接受您评论中的 .format() 变体(包括嵌套引号)的可读性略高的观点,但您是否不会为了可读性而牺牲性能?
  • @Boa 通常为了性能而牺牲可读性是不好的。我还遇到过这样一种情况,在我的应用程序中实际上可以测量这两种替代方案之间的性能差异。
【解决方案3】:

不要自己这样做。你会在试图处理所有极端情况时绊倒自己。 (如果您的字段中可以包含双引号怎么办?)请改用csv 模块:

s = StringIO()
writer = csv.writer(s, delimiter="|")
writer.writerow(["a", "b", "c", "d,", "e|", "foo\"bar"])
print i.getvalue()

你得到:

a|b|c|d,|"e|"|"foo""bar"

【讨论】:

    【解决方案4】:
    >>> "|".join(['"{0}"'.format(x) for x in my_list])
    "a"|"b"|"c"|"d"|"e"|"f"
    

    【讨论】:

    • 你的python版本是什么?
    • 无法转义项目中的双引号。
    • 如果你的序列化方案是“加入带有特殊字符的东西,并希望这个特殊字符不会出现在任何项目中”,那么你的序列化方案就有缺陷。
    • @StumpyJoePete 答案是针对 OP 发布的具体问题
    • 这听起来很像 OP 尝试使用逗号然后管道,但他们的项目最终有这些字符,所以他们询问如何使用其他字符序列来做到这一点。如果您有任意字符串,那么这是错误的方法。希望您将来没有特定的字符序列不是解决方案。
    猜你喜欢
    • 2022-01-13
    • 2019-09-12
    • 1970-01-01
    • 2021-12-11
    • 2017-09-16
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多