我有一个字符串列表。我需要为所有这些字符串添加一个字符串,然后再将第二个字符串添加到其中的两个字符串中。我正在尝试以下方法:
[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”的方式),但它不起作用。我理解为什么它不起作用,但我不确定如何将上述行重写为可行的东西。
答案 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 ']
这只是我需要用+替换以连接列表的扩展方法。