【问题标题】:Append a new item to a list within a list将新项目附加到列表中的列表
【发布时间】:2011-10-12 11:38:36
【问题描述】:

我正在尝试将新的浮点元素附加到另一个列表中的列表中,例如:

list = [[]]*2
list[1].append(2.5)

我得到以下信息:

print list
[[2.5], [2.5]]

当我想得到:

[[], [2.5]]

我该怎么做?

提前致谢。

【问题讨论】:

  • 正如 agf 在下面指出的,最好避免使用 list 作为变量名,因为它通常是内置列表类型的名称。
  • 为了方便使用,经常使用“lst”。

标签: python list append


【解决方案1】:
list = [[]]
list.append([2.5])

list = [[],[]]
list[1].append(2.5)

【讨论】:

    【解决方案2】:

    lst = [[] for _ in xrange(2)](或只是[[], []])。不要对可变对象使用乘法——你得到 X 次相同的,而不是 X 次不同的。

    【讨论】:

    • 我建议不要使用_,因为它显然会弄乱一些交互式解释器。另外,不要称它为list,您正在掩盖内置函数。此外,对于不可变对象,您也会得到相同的 X 次,这通常并不重要,除非您以后想要检查对象身份。
    • @ag: _ 是标准的“我不关心这个变量”变量。交互模式使用它来存储最后的结果,但它肯定不会弄乱任何东西。
    • 我知道它的用途。我现在忘记了,但我相信它会弄乱其中一个 IDE 中的回溯。
    • @agf:那是那个 IDE 的错误。至少对我来说,通用代码风格更重要。
    • @CatPlusPlus underscore 经常在多语言应用程序中用作翻译器,因此除非您从未从事过此类项目,否则使用它是不好的做法
    【解决方案3】:
    list_list = [[] for Null in range(2)]
    

    不要叫它list,那样会阻止你调用内置函数list()

    出现问题的原因是 Python 创建了一个列表,然后重复了两次。因此,无论您是通过使用list_list[0] 还是使用list_list[1] 访问它来追加它,您都在做同样的事情,因此您的更改将出现在两个索引中。

    【讨论】:

      【解决方案4】:

      你应该这样写:

      >>> l = [[] for _ in xrange(2)]
      >>> l[1].append(2.5)
      >>> l
      [[], [2.5]]
      

      【讨论】:

        【解决方案5】:

        [] 是一个列表构造函数,在[[]] 中构造了一个列表和一个子列表。 *2 复制了对内部列表的引用,但没有构造新列表:

        >>> list[0] is list[1]
        ... True
        >>> list[0] is []
        ... False
        

        解决方案是有 2 个内部列表,list = [[], []]

        【讨论】:

          【解决方案6】:

          您的外部列表包含另一个列表,并且将外部列表相乘将得到结果列表的所有项目都具有指向内部列表的相同指针。 您可以像这样递归地创建多维列表:

          def MultiDimensionalList(instance, *dimensions):
              if len(dimensions) == 1:
                return list(
                   instance() for i in xrange(
                    dimensions[0]
                  )
                )
              else:
                return list(
                  MultiDimensionalList(instance, *dimensions[1:]) for i
                  in xrange(dimensions[0])
                )
          
          print MultiDimensionalList(lambda: None, 1, 1, 0)
          

          [[]]

          【讨论】:

          • 但允许您创建任何维度的列表。
          • 当然!过度设计的东西通常可以让你做“酷”的事情,但就初始要求而言,大部分都不需要;-)
          【解决方案7】:

          根据@Cat Plus Plus,不要使用乘法。我试过没有它。使用相同的代码。

          >> list = [[],[]]
          >> list[1].append(2.5)
          >> list
          >> [[],[2.5]]
          

          【讨论】:

            【解决方案8】:

            你可以用最简单的方式来做......

            >>> list = [[]]*2
            >>> list[1] = [2.5]
            >>> list
            [[], [2.5]]
            

            【讨论】:

              猜你喜欢
              • 2017-09-20
              • 2021-08-01
              • 2017-12-24
              • 2011-01-31
              • 2011-12-09
              • 2011-05-15
              • 2013-12-24
              • 2013-03-08
              相关资源
              最近更新 更多