如何以“pythonic”方式向列表中的各种字符串添加单独的字符串?

时间:2017-03-15 14:31:00

标签: python list

我有一个字符串列表。我需要为所有这些字符串添加一个字符串,然后再将第二个字符串添加到其中的两个字符串中。我正在尝试以下方法:

[s + ' help ' for s in [ ['me '].extend(['with ' + t for t in ['things', 'please']]) ] ]

我期望的是以下内容:

['me help ', 'with things help ', 'with please help ']

当我尝试在iPython中运行时没有任何反应。在'新创建'列表中使用extend方法似乎有问题。我不确定,对python来说比较新。

编辑:

更明确地说,在上面的例子中,原始列表将是:

['me', 'things', 'please']

我需要为所有人添加“帮助”,并且只对后两者添加“帮助”。

运行上面一行代码时出错:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

第二次编辑:

我更专注于元素的位置。我想要一个字符串添加到列表的每个元素,不包括第一个,然后第二个字符串添加到整个新列表。我的上述方法是第一次尝试应该是什么(以最“pythonic”的方式),但它不起作用。我理解为什么它不起作用,但我不确定如何将上述行重写为可行的东西。

5 个答案:

答案 0 :(得分:2)

如果您想索引列表中的元素,可以使用它:

 s=['me', 'things', 'please']
   ['with ' + x + ' help' if x!=s[0] else x+' help' for x in s]

答案 1 :(得分:1)

除非您定义一个扩展列表并返回结果的函数:

def lext(l, lx):
    l.extend(lx)
    return l

(python已经做过):

import itertools
lext = itertools.chain

并以这种方式使用它:

[s + ' help ' for s in lext(['me '], ['with ' + t for t in ['things', 'please']])]

你必须一步一步地做到这一点:

inp = ['me', 'things', 'please']
out1 = [ s + ' help' for s in inp]
out2 = [ out1[0] ]
out2.extend(('with ' + s for s in out1[1:]))

欢迎来到精彩的程序和功能世界。命令和表达式:)

答案 2 :(得分:0)

如果基于字符串匹配:

['with ' + t + ' help' if t != 'me' else t + ' help' for t in ['me', 'things', 'please']]

如果某个项目为me,则会创建一个字符串列表。

产地:

['me help', 'with things help', 'with please help']

如果它的位置:

如果你总是知道这个位置,这可能会有所帮助:

x = ['me', 'things', 'please']
word_pos = 1
['{} help'.format(i) for i in x[:word_pos]] + ['with {} help'.format(i) for i in x[word_pos:]]

产生:

['me help', 'with things help', 'with please help']

任何一个都可以是一个单行,但我强烈建议扩展它们,因为它们很快就会变得愚蠢。

答案 3 :(得分:0)

这是一种可能的解决方案,可以完全达到您所期望的效果:

items = ['me', 'things', 'please']
new_items = []

for index, value in enumerate(items):
    # Prepend to every item but the first
    if i > 0:
        v = "with %s" % v

    # Append to every item
    v = "%s help " % v

    new_items.append(v)

print(new_items)  # outputs: ['me help ', 'with things help ', 'with please help ']

这会将help添加到每个项目,并将with添加到除第一个项目之外的所有项目。

答案 4 :(得分:0)

我想我想出来了。谢谢大家的帮助,但这是(最简单)我想要的:

[s + ' help ' for s in  ['me '] + ['with ' + t for t in ['things', 'please']]   ]

产生

['me  help ', 'with things help ', 'with please help ']

这只是我需要用+替换以连接列表的扩展方法。