【问题标题】:String formatting字符串格式
【发布时间】:2010-11-25 20:13:09
【问题描述】:

我有一个列表过滤器 = ['a', 'b', 'c']。我需要将以下字符串框出列表 “项目-a 项目-b 项目-c”。哪种方法最有效?通常列表过滤器包含 100 到 200 个项目,每个项目的长度为 100 - 150。这不会导致溢出吗?并且支持的字符串最大长度是多少?

【问题讨论】:

  • 不要使用filter作为变量名。 “过滤器”是一个 Python 函数。
  • Python 内置的东西太多了,很难不时不踩它们。它通常只影响它所在的​​代码块,因此与其尝试记住每个内置函数名称,不如避免使用你知道和使用的那些,并在以后如果你错过一个并且需要使用它时重命名变量,这是相当无害的。
  • 内置函数真的不多。刚刚超过 80 岁。
  • 特殊函数,如filter,IDE 通常会突出显示。

标签: python-3.x python


【解决方案1】:

你可以使用join(我相信join在Python 3.0中是一样的):

>>> l = ['a','b','c']
>>> print ' item -'.join([''] + l)
>>> ' item -a item -b item -c'

>>> print ' item -'.join([''] + l).lstrip(' ') # eat the leading space
>>> 'item -a item -b item -c'

【讨论】:

  • 您可能还想从结果中删除多余的空格。
  • @Dominic Rodger,是的,我们可以修剪前导空间。 join(l) 不会给出 Prabhu 想要的结果。该字符串将以'a item...' 开头,而不是'item -a...'
【解决方案2】:

一种更简洁的方法:

filter = ['a', 'b', 'c']
" ".join(["item -%s" % val for val in filter])

这适用于大型数组,例如。 filter = ['a'*1000] * 1000.

【讨论】:

    【解决方案3】:

    再次使用join

    但是对于f-string,这将是:

    filter = ['a', 'b', 'c']
    print(" ".join([f"item -{val}" for val in filter]))
    

    如上所述,避免使用关键字来命名变量。

    【讨论】:

      猜你喜欢
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2012-12-31
      • 2021-08-06
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多