【问题标题】:Problems while inserting element to last position of a list/index?将元素插入列表/索引的最后位置时出现问题?
【发布时间】:2019-12-19 12:59:02
【问题描述】:

我有一个这样的列表:

[[['apple', 'bannana', 'lemon', 'watermelon'], ['apple', 'orange', 'peach', 'bannana']],
[['apple', 'orange', 'watermelon', 'peach'], ['apple', 'grapes', 'peach', 'bannana']],
[['apple', 'orange', 'lemon', 'grapes'], ['apple', 'bannana', 'lemon', 'watermelon']]]

如何在第一个 subsub 列表的最后位置添加新元素,例如 'hi' 字符串?

例如:

[[['apple', 'bannana', 'lemon', 'watermelon', 'hi'], ['apple', 'orange', 'peach', 'bannana']],
[['apple', 'orange', 'watermelon', 'peach', 'hi'], ['apple', 'grapes', 'peach', 'bannana']],
[['apple', 'orange', 'lemon', 'grapes', 'hi'], ['apple', 'bannana', 'lemon', 'watermelon']]]

我尝试迭代和重建列表。但是,由于某种原因正在添加不止一次的新字符串:

 for i in l:
     i[0].insert(len(i[0]), 'hi')
 print(i[0])

还有其他pythonic方式吗?我不想要的是最终用更多列表重建原始列表。

【问题讨论】:

    标签: python python-3.x iteration list-comprehension


    【解决方案1】:

    list.insertlist.append 的泛化,它可以在任何地方插入元素(这样做的效率相对较低,append 摊销了O(1) 的复杂性)。如果您只想在list 的末尾“插入”,请改用append

    for i in l:
        i[0].append('hi')
    

    如果你的llists 总是由两个项目组成,你可以使用可迭代解包来避免索引(理想情况下,给每个部分一个有用的名称,而不仅仅是i),例如:

    for part1, part2 in l:  # Or since you never use part2, just for part1, _ in l:
        part1.append('hi')
    

    【讨论】:

    • 感谢您的帮助,但我在part1 末尾重复了hi
    • @J.Doe:听起来像 1) 您运行了两个代码示例,而不仅仅是一个(或其中一个运行了两次)或 2) 您的部分或全部 part1s 是彼此(它们实际上是相同 list),所以每个append 都在修改相同的list,因此appending 两次。它works as written.
    • 哦,或者选项#3(我在上一条评论中创建该链接时点击了该选项):您通过粘贴您想要的最终结果意外初始化了l(所以'hi'已经存在于所有开始之前的part1s,然后添加了第二个append)。选项 4 将是“您有没有向我们展示的代码正在运行两次 append 循环”。
    • 还有其他选择吗?出于某种原因,我仍然在嵌套列表末尾重复 hi 元素
    • @J.Doe:选项 #4 涵盖了很多内容。您可以更新您的问题以添加 minimal reproducible example,但请确保代码确实确实重现了您的问题,并且单独运行。
    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多