【问题标题】:Python Removing a sublist in a list without changing the index of other sublists in the listPython删除列表中的子列表而不更改列表中其他子列表的索引
【发布时间】:2015-11-22 04:32:20
【问题描述】:

比如说:

list = { [1,2,3],[4,5,6],[3,4],[2,7,8,9] }

有没有办法在 python 中删除子列表并确保其他子列表索引保持不变。因此,例如,如果我要删除子列表 [3,4],我可以确保在这种情况下 [2,7,8,9] 的索引保持为 3 吗?如果这是可能的,那真的很有帮助!谢谢!

【问题讨论】:

  • Set 不是有序的数据结构,因此 index 一词在这里是不敬的。你是说二维列表吗?
  • 首先list = { ... } 不是一个列表。您可以简单地将子列表替换为''empty 字符或None
  • @AhsanulHaque 是 2d 列表,我想在此示例中删除 [3,4] 而不更改其他子列表的 [col][rows]。
  • 如何删除[3,4] 中的元素并保持空列表像这样'[]'

标签: python list multidimensional-array 2d indexof


【解决方案1】:

也许吧。这取决于您如何使用列表以及生成的对象需要有多“列表”。

l = [ [1,2,3],[4,5,6],[3,4],[2,7,8,9] ]

您可以将子列表替换为其他内容,例如 None。然后,您的代码必须知道在处理列表时忽略 None。

print(l[3])
l[2] = None
print(l[3])

或者您可以将列表转换为字典并删除该成员。您仍然可以索引该对象,但由于它现在是一个字典,您的代码必须将其视为字典。

l = dict(enumerate(l))
print l[3]
del l[2]
print l[3]

这些技巧只适用于某些特殊环境。

【讨论】:

  • 所以如果我没有放 python 会知道忽略它,当它出现时它不会是一个错误?谢谢你的回答,顺便说一句,我很感激。
  • 如果我在循环中运行 2d 列表会出现错误,它说无类型的对象没有长度。
  • python 不知道忽略它......它可能会编写您的代码来忽略它。这就是“可能”的来源。如果您的代码正在处理列表,则清除子列表可能就足够了。要从列表中删除所有项目,您可以del somelist[:]。既然你有一个子列表,那就是del l[2][:]。除此之外,如果您遇到问题,您可能可以修改您的代码,或者这可能意味着这个 hack 不会起作用。
【解决方案2】:

您可以只删除[3,4] 中的元素并保留空的子列表。

>>> lst = [[1,2,3],[4,5,6],[3,4],[2,7,8,9]]
>>> del lst[2][:]
>>> lst
[[1, 2, 3], [4, 5, 6], [], [2, 7, 8, 9]]

请注意,您不应将list 用作variable 名称,因为listbuilt in function

【讨论】:

    【解决方案3】:

    但是您可以将带有值的索引存储为元组。首先制作一个具有索引和值的修改列表。然后,您可以随意删除任何元素。

    lst = [[1,2,3],[4,5,6],[3,4],[2,7,8,9]]
    modified = list(enumerate(lst))
    

    稍微解释一下:

    modified=[]
    
    for i,v in enumerate(lst):
        modified.append((i,v))
    
    print modified
    

    输出:

    [(0, [1, 2, 3]), (1, [4, 5, 6]), (2, [3, 4]), (3, [2, 7, 8, 9])]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2023-03-26
      • 2021-03-20
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多