Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在';pythonic';路?_Python_List - Fatal编程技术网

如何在';pythonic';路?

如何在';pythonic';路?,python,list,Python,List,我有一个字符串列表。我需要为所有的字符串添加一个字符串,然后只为其中两个添加第二个字符串。我正在尝试以下方法: [s + ' help ' for s in [ ['me '].extend(['with ' + t for t in ['things', 'please']]) ] ] ['me help ', 'with things help ', 'with please help '] 我所期望的是: [s + ' help ' for s in [ ['me '].extend(

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

[s + ' help ' for s in [ ['me '].extend(['with ' + t for t in ['things', 'please']]) ] ]
['me help ', 'with things help ', 'with please help ']
我所期望的是:

[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']
我需要为所有这些添加“帮助”,并仅为后两个添加“with”

我在运行上述代码行时出错:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
第二次编辑:

我更关注元素的位置。我希望将一个字符串添加到列表的每个元素中,不包括第一个,然后将第二个字符串添加到整个新列表中。我上面的方法是第一次尝试它应该是什么(以最“pythonic”的方式),但它不起作用。我理解它为什么不起作用,但我不确定如何将上面的行改写成可以起作用的内容。

如果它是基于字符串匹配的: 这将根据项目是否为
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']

任何一个都可以是一行程序,但我强烈建议扩展这些程序,因为它们很快就会变得不可靠。

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

def lext(l, lx):
    l.extend(lx)
    return l
(python已经做到了这一点):

并以这种方式使用它:

[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:]))

欢迎来到程序和功能的奇妙世界,aka。命令和表达式:)

这是一个可能的解决方案,可以完全实现您所编写的内容:

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 ']

这会将
帮助
附加到每一项,并在除第一项之外的每一项前面添加

我想我已经解决了这个问题。谢谢大家的帮助,但这正是(最简单的)我想要得到的:

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

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

这正是我需要用+替换的extend方法来连接列表。

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

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

列表是静态长度,列表是什么?您还需要哪两个来添加第二个字符串?你得到的输出是什么?我不知道你所说的“静态”是什么意思。原始列表是动态的,需要添加静态的东西。不过我能应付。我只需要知道如何做这一部分。我的意思是静态的,列表的大小总是一样的。我想我的意思是,您总是在列表的最后两个元素中添加第二个字符串,还是总是添加第二个和第三个元素?您需要想出一些通用规则(特别是对于这个可选的添加)。根据什么标准,应包括可选脚本?在名单上的位置?列表中的原始值?还有什么?我正在将字符串添加到列表中的所有元素中,但第一个元素除外。大小(目前)是静态的,但我可以预见它是动态的。所以,我想保持它相对于原始列表的大小的动态性。我喜欢你的想法,是的,它会起作用。但我更关注元素在列表中的位置。好主意。谢谢。@lukehawk我不确定是否有可能以一种有效的方式对这一行进行索引。我只是假设你需要这个是因为语言上的原因(否则某些短语听起来会很糟糕)。如果没有其他人能想出更好的选择,我会看看我是否能发挥更大的魔力。谢谢你的尝试,是的,这是我所要求的关键。这似乎是一个相对简单的问题,像你这样的巫师应该有一个优雅的答案,但我对“pythonic”的方式非常缺乏经验,并且感到茫然。@lukehawk不完全确定这是否是pythonic。。在这种情况下,我会考虑扩展为“OF”循环。但我更新了我的答案,提出了一个既能定位又能处理if情况的解决方案。这就是将两个列表连接起来,并使用迭代器操作符格式化每个“一半”<代码>['{}help'。在x[:1]]+['with{}help]中为i设置格式(i)。在x[1:]
中为i设置格式(i)其中
x
是您在第一次编辑中给出的字符串列表。因此,接受此答案。如果您需要担心空间问题,请查看
itertools.chain(listone,listwo)
(例如)和生成器:
(itertools.chain中s的s+帮助(('me',),('with'+t表示t in('things','please'))
。这将是一种有效的方法:)谢谢!我感谢你帮助我更接近这个目标。