代码之家  ›  专栏  ›  技术社区  ›  Julius F

将字符串添加到另一个字符串

  •  1
  • Julius F  · 技术社区  · 14 年前

    我目前遇到了一个问题: 我想非常有效地处理向其他字符串添加字符串的问题,所以我查阅了许多方法和技巧,并找到了“最快”的方法。 但我不明白它到底是怎么工作的:

    def method6():
        return ''.join([`num` for num in xrange(loop_count)])
    

    source (Method 6)

    尤其是 ([`num` for num in xrange(loop_count)])

    4 回复  |  直到 14 年前
        1
  •  2
  •   gilesc    14 年前

    xrange()是range()的一个更快的(用C编写)版本。

    倒勾符号-- num

    [x for x in y]称为列表理解,基本上是一个单行for循环,返回一个列表作为结果。总之,您的代码在语义上等同于以下内容,但速度更快,因为列表理解和 xrange 比循环和 range :

    z = []
    for i in range(loop_count):
       z.append(str(i))
    return "".join(z)
    
        2
  •  6
  •   SilentGhost    14 年前

    它是一个 list comprehension repr 转换。别这样。在py3k中,Backticks已被弃用并删除,更有效和更具python风格的方法根本不是构建中间列表,而是使用生成器表达式:

    ''.join(str(num) for num in xrange(loop_count))        # use range in py3k
    
        3
  •  2
  •   tlayton    14 年前

    括号中的那一部分是列表理解,可以说是Python最强大的元素之一。它通过迭代生成一个列表。您可能需要查找它的文档。使用backticks将num转换为字符串是不可取的-请尝试str(num)或类似的方法。

    join()是string类的一个方法。它获取一个字符串列表并返回一个字符串,该字符串由每个由“self”分隔的组件字符串组成(也称为调用字符串)。这里的技巧是join()直接从字符串文本“”调用,这在Python中是允许的。这段代码将生成一个字符串,由xrange(loop\u count)的每个元素的字符串形式组成,不带分隔符。

        4
  •  1
  •   nd.    14 年前

    首先:虽然这段代码在Python的2.x系列中仍然是正确的,但它有点令人困惑,而且可以用不同的方式编写:

    def method6a():
        return ''.join(str(num) for num in xrange(loop_count))
    

    在Python2.x中,可以使用backticks代替repr函数。方括号[]中的表达式是一个列表。如果您不熟悉列表理解:它们的工作方式类似于循环和列表附加语句的组合,只是您不必为变量创建名称:

    这两者是等价的:

    a = [repr(num) for num in xrange(loop_count)]
    # <=>
    a = []
    for num in xrange(loop_count):
        a.append(repr(num))
    

    最后, string.join(iterable) 将使用 string 连接中的所有字符串 iterable 一串

    • 我曾经 str repr 因为所有int的结果都是相同的,而且更容易阅读。
    • 我用的是 generator expression 而不是列表理解,因为由列表理解构建的列表是不必要的,并且无论如何都会被垃圾收集。生成器表达式是iterable,但它们不需要存储列表中的所有元素。当然,如果已经有一个字符串列表,那么只需将该列表传递给join。

    一般来说,大多数Python程序员都能很好地理解'.join(iterable)习惯用法的意思是“任何字符串列表的字符串串联”,因此可理解性不应该是一个问题。