如何使用子列表替换列表中的字符串

Cle*_*lee -3 python string list python-3.x

li = ['a', '#b', 'c']
repl = ['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)

我想改变'#b'repl子表,意义,这是我想要的输出:

['a', ['1', '2', '3'], 'c']
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的尝试:

for i in li:
    if i.startswith('#'):
        i.replace(i, repl)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-151b36fac37c> in <module>()
      1 for i in li:
      2     if i.startswith('#'):
----> 3         i.replace(i, repl)

TypeError: Can't convert 'list' object to str implicitly
Run Code Online (Sandbox Code Playgroud)

Aja*_*234 6

您不能用列表替换子字符串.相反,使用理解迭代列表:

li = ['a', '#b', 'c']
repl = ['1', '2', '3']
new_li = [repl if i.startswith('#') else i for i in li]
Run Code Online (Sandbox Code Playgroud)

输出:

['a', ['1', '2', '3'], 'c']
Run Code Online (Sandbox Code Playgroud)

如果您不想使用列表推导,您可以写出整个泛型循环,也可以使用函数方法:

通用循环:

new_l = []
for i in li:
   if i.startswith('#'):
      new_l.append(repl)
   else:
      new_l.append(i)
Run Code Online (Sandbox Code Playgroud)

功能方法:

new_li = map(lambda x:repl if x.startswith('#') else x, li)
Run Code Online (Sandbox Code Playgroud)


Yoa*_*ner 5

就地版

li = ['a', '#b', 'c']
repl = ['1', '2', '3']
for i, item in enumerate(li):
    if item.startswith('#'):
        li[i] = repl
Run Code Online (Sandbox Code Playgroud)