【问题标题】:Python, Appending string on each item on the listPython,在列表中的每个项目上附加字符串
【发布时间】:2013-06-03 08:14:26
【问题描述】:

我有一个代码在列表的每个项目上连接一个字符串“lst”。

    i = 0
    lim = len(lst)
    while i < lim:
        lst[i] = 'lst%s' % (lst[i])
        i += 1

有更快的方法吗?

【问题讨论】:

  • 标题实际上应该是“在每个项目上添加字符串”

标签: python arrays string list append


【解决方案1】:

使用列表理解切片赋值:

lst[:] = ['lst' + x for x in lst]

【讨论】:

  • 不需要创建临时列表,使用生成器表达式即可
  • @gnibbler 使用生成器表达式仍然会创建一个临时列表
  • 哦,该死的——但这肯定只是一个实现细节。最好写出你真正的意思,以防实施改进
【解决方案2】:

有趣的地图版本

>>> lst=['foo', 'bar', 'baz']
>>> map('lst'.__add__, lst)
['lstfoo', 'lstbar', 'lstbaz']

但更严重的是,您可以从生成器表达式中分配给切片

>>> lst[:] = ('lst{}'.format(x) for x in lst)
>>> lst
['lstfoo', 'lstbar', 'lstbaz']

【讨论】:

    【解决方案3】:

    这是地图版本

    lst = map(lambda x: 'lst%s' % x, lst)
    

    【讨论】:

    • 恕我直言,唯一好的 map 版本是 map('lst{0}'.format, lst)
    • 太棒了 :) 我仍然被困在 python 2.4 中!!
    • @jamylak,我赞成您的评论,因为它是最好的地图版本,但我不同意有一个地图版本。
    • @shyam,2.4 的等价物是 map('lst%s'.__mod__, lst)
    【解决方案4】:

    这会修改原来的lst对象:

    lst[:] = ['lst%s' % item for item in lst]
    

    或使用新样式的字符串格式:

    lst[:] = ['lst{}'.format(item) for item in lst]
    

    【讨论】:

    • 为什么在这里使用切片分配 (lst[:] =) 很重要?没有它也适用于我。
    猜你喜欢
    • 2011-01-08
    • 2019-07-05
    • 2015-09-21
    • 2021-04-12
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-07-25
    • 2020-08-15
    相关资源
    最近更新 更多