用两个替换列表中的一个项目的最简单方法是什么?
所以:
list=['t' , 'r', 'g', 'h', 'k']
如果我想用'a'和'b'替换'r':
list = ['t' , 'a' , 'b', 'g', 'h', 'k']
答案 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']
现在请选择一个更易读的答案。 :)