用一个列表中的两个或多个替换一个项目的pythonic方法

gcb*_*gcb 3 python

我如何以两个或更多的方式替换列表中的一个项目?我正在使用拆分和索引来做它,它看起来非常非python.

我希望这样的东西存在:

values = [ "a", "b", "old", "c" ]
[ yield ["new1", "new2"] if item == "old" else item for item in values ]
// return [ "a", "b", "new1", "new2", "c" ]
Run Code Online (Sandbox Code Playgroud)

Gar*_*tty 12

最好的方法是使用itertools.chain.from_iterable:

itertools.chain.from_iterable(
  ("new1", "new2") if item == "old" else (item, ) for item in values)
Run Code Online (Sandbox Code Playgroud)

您面临的"每个项目的多个项目"问题可通过创建嵌套列表,然后将其展开来解决.通过制作所有项目元组(单项元组,我们只想要一个),我们可以实现这一点.

当然,如果你需要一个列表,而不是一个迭代器,请通过调用来包装整个事物list().

  • @gcb使用标准库不是依赖 - 它只是不重新发明轮子.避免使用标准库只是愚蠢的事情. (3认同)
  • @arshajii:如果"旧"出现两次会怎样?切片解决方案不会捕获它们除非你循环 - 这就是Just Works(tm). (2认同)
  • 另一种变化:`[i for item in in值in(('new1','new2')if item =='old'son else(item,))]` (2认同)
  • @PavelAnossov这种扁平化方法不太清晰和慢.一般来说,我会建议不要这样做. (2认同)