开发者社区> 问答> 正文

如何在特定子列表之前插入元素?

我有以下列表,为此,我想在每个子列表的第一个元素中具有“ t”的每个元素之前插入“ x”。

z = [['a', 2], ['t',4], ['r',9], ['t',1], ['u',2], ['p',7], ['y',9], ['t',1], ['s',3], ['v',1]]      

我的预期输出是:

z = [['a' 2], x, ['t',4], ['r',9], x, ['t',1], ['u',2], ['p',7], ['y',9], x, ['t',1], ['s',3], ['v',1]] 

我当前的代码几乎可以正常工作,但是我不知道为什么在具有“ t”的第三个子列表之前不插入“ x”,而是在具有“ t”的第二个子列表之前插入两个“ x”。

for sl in reversed(z):
    if sl[0] == 't':
        print(z.index(sl))  
        z.insert(z.index(sl),'x')

>>> print(z)

[['a', 2], 'x', ['t', 4], ['r', 9], 'x', 'x', ['t', 1], ['u', 2], ['p', 7], ['y', 9], ['t', 1], ['s', 3], ['v', 1]]

为什么我做错了?怎么做?

问题来源:stackoverflow

展开
收起
is大龙 2020-03-23 20:25:20 386 0
1 条回答
写回答
取消 提交回答
  • 您在对列表进行迭代时对其进行了更改,一旦开始插入项目,原始列表的索引就会更改,从而导致实现for循环的迭代器的索引发生移位。

    相反,您可以使用列表理解功能构建一个新列表,如果子列表的第一项是t,则该列表将在当前子列表之前输出一个额外的x

    z = [i for c, n in z for i in (\*'x' if c == 't' else ()), [c, n])]
    

    z变为:

    [['a', 2], 'x', ['t', 4], ['r', 9], 'x', ['t', 1], ['u', 2], ['p', 7], ['y', 9], 'x', ['t', 1], ['s', 3], ['v', 1]]
    

    回答来源:stackoverflow

    2020-03-23 20:25:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载