用两个项目替换列表中的一个项目

时间:2014-03-10 19:19:35

标签: python list replace

用两个替换列表中的一个项目的最简单方法是什么?

所以:

list=['t' , 'r', 'g', 'h', 'k']

如果我想用'a'和'b'替换'r':

list = ['t' , 'a' , 'b', 'g', 'h', 'k']

3 个答案:

答案 0 :(得分:3)

切片分配可以很容易地完成:

>>> l = ['t' , 'r', 'g', 'h', 'k']
>>> 
>>> pos = l.index('r')
>>> l[pos:pos+1] = ('a', 'b')
>>> 
>>> l
['t', 'a', 'b', 'g', 'h', 'k']

此外,请勿调用变量list,因为内置函数已使用该名称。

答案 1 :(得分:2)

如果列表包含多于1次出现的'r',那么您可以使用列表推导或itertools.chain.from_iterable和生成器表达式。但是,如果列表只包含一个这样的项目,那么@ arshajii的解决方案。

>>> lis = ['t' , 'r', 'g', 'h', 'k']
>>> [y for x in lis for y in ([x] if x != 'r' else ['a', 'b'])]
['t', 'a', 'b', 'g', 'h', 'k']

或:

>>> from itertools import chain
>>> list(chain.from_iterable([x] if x != 'r' else ['a', 'b'] for x in lis))
['t', 'a', 'b', 'g', 'h', 'k']

答案 2 :(得分:0)

这是一种过于复杂的方法来拼接每次出现的'r'。只是为了好玩。

>>> l = ['t', 'r', 'g', 'h', 'r', 'k', 'r']
>>> reduce(lambda p,v: p + list('ab' if v=='r' else v), l, [])
['t', 'a', 'b', 'g', 'h', 'a', 'b', 'k', 'a', 'b']

现在请选择一个更易读的答案。 :)

相关问题