【问题标题】:What does the list() function do in Python?Python 中的 list() 函数有什么作用?
【发布时间】:2014-10-27 04:57:45
【问题描述】:

我知道list() 构造函数会创建一个新列表,但它的特征到底是什么?

  1. 拨打list((1,2,3,4,[5,6,7,8],9))会发生什么?

  2. 拨打list([[[2,3,4]]])会发生什么?

  3. 拨打list([[1,2,3],[4,5,6]])会发生什么?

据我所知,调用构造函数list 会删除最外面的大括号(元组或列表)并将它们替换为[]。这是真的? list() 还有哪些其他细微差别?

【问题讨论】:

  • 是什么阻止你在解释器中尝试这些东西?结果应该是不言而喻的。
  • 因为我不知道构造函数是否还有其他深奥的细微差别。您应该能够从问题中阅读的内容。 @skrrgwasme
  • 一般来说,python 的优点之一是您不必担心内置类型的深奥细微差别。如果您只是花时间实际使用内置类型,并在发现它们不符合您的用例时尝试利用它们的相关奥秘,您会做得更好。

标签: python list python-3.x


【解决方案1】:

list() 将传递给它的可迭代对象转换为列表。如果 itertable 已经是一个列表,则返回 浅拷贝,即只有最外层的容器是新的,其余对象仍然相同。

>>> t = (1,2,3,4,[5,6,7,8],9)
>>> lst = list(t) 
>>> lst[4] is t[4]  #outermost container is now a list() but inner items are still same.
True

>>> lst1 = [[[2,3,4]]]
>>> id(lst1)
140270501696936
>>> lst2 = list(lst1)
>>> id(lst2)
140270478302096
>>> lst1[0] is lst2[0]
True

【讨论】:

  • so in English: list 删除了外部大括号并用[] 替换它们,内部项目仍然与以前相同。对吗?
  • 另外,你的第 4 行中的 _ 做了什么?
  • @ylun.ca 对于元组你可以这么说,对于列表它相当于切片([:])。请注意,它适用于任何可迭代/迭代器,因此它不仅仅是替换大括号。对于迭代器,它将消耗整个迭代器并返回其项目列表,对于 dict,它将返回其键列表等。
  • @ylun.ca _ 指的是 Python shell 中的前一个对象(为了清楚起见,我现在将其删除)。
  • @ylun.ca 考虑到t 也是一个列表(因为元组本身是不可变的),那么这不会影响lst[0],因为您正在修改一个完全不同的容器。赋值运算符意味着这个容器中第 0 个索引处的指针现在将指向 100,这不会影响另一个容器。但是,如果您尝试更新索引 4 处的列表(例如 lst[4][0] = 100),那么它将反映在 tlst 中,因为它们都包含对同一列表对象的引用。相关:Python list([]) and []
【解决方案2】:

Python 的每个发行版本都有完善的文档集,可在https://docs.python.org/ 阅读。 list() 的文档指出 list() 只是构造列表对象的一种方式,其中列出的方式如下:

  • 使用一对方括号来表示空列表:[]
  • 使用方括号,用逗号分隔项目:[a], [a, b, c]
  • 使用列表推导:[x for x in iterable]
  • 使用类型构造函数:list() 或 list(iterable)

list() 函数接受任何可迭代对象作为其参数,返回值是一个列表对象。

延伸阅读:https://docs.python.org/3.4/library/stdtypes.html#typesseq-list

【讨论】:

  • 我正在寻找 list 构造函数的作用,而不是如何创建列表。它的行为是什么?该函数需要哪些步骤来创建列表?
【解决方案3】:

是的,这是真的。

它非常简单。 list() 将可迭代对象作为输入,并将其元素添加到新创建的列表中。元素可以是任何东西。它也可以是另一个列表或可迭代对象,它将按原样添加到新列表中。

即不会发生嵌套处理。

【讨论】:

    【解决方案4】:

    你说:“据我所知,调用构造函数列表会删除最外面的大括号(元组或列表)并用 [] 替换它们。这是真的吗?”

    恕我直言,这不是思考list()做什么的好方法。确实,方括号[] 用于编写列表文字,并且在您告诉列表将其自身表示为字符串时使用,但最终,这只是符号。最好将 Python 列表视为具有某些属性的特定类型的容器对象,例如,它是有序的、可索引的、可迭代的、可变的等。

    考虑list() 构造函数,它对传递给它的元组的括号类型执行转换,这有点像说将 3 加到 6 将 6 倒置为 9。 “9”字形看起来像“6”字形颠倒过来,但这与算术级别发生的事情无关,甚至并非所有字体都如此。

    【讨论】:

      【解决方案5】:
      aTuple = (123, 'xyz', 'zara', 'abc');
      aList = list(aTuple)
      
      print "List elements : ", aList
      

      当我们运行上面的程序时,它会产生以下结果:

      List elements :  [123, 'xyz', 'zara', 'abc']
      

      这是在 python 中创建列表的另一种方法。多么方便!

      【讨论】:

        【解决方案6】:

        您的问题含糊不清,但输出如下,它不会“替换”外部大括号,它会创建一个列表的数据结构,该结构可以包含“列出”顺序中的任何值(后一个另一个,一个接一个,依此类推...)以递归方式,您可以使用 append 和 pop 将元素添加/删除到指定的索引。另一方面,元组是静态的,不是动态链接的,它们更像是任何类型元素的数组。

        时间:

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

        返回:

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

        时间:

        list([[[2,3,4]]])
        

        返回:

        [[[2, 3, 4]]]
        

        时间:

        list([[1,2,3],[4,5,6]])
        

        返回:

        [[1, 2, 3], [4, 5, 6]]
        

        【讨论】:

          猜你喜欢
          • 2015-10-08
          • 1970-01-01
          • 2014-02-12
          • 2011-05-04
          • 1970-01-01
          • 2020-08-20
          • 2023-01-16
          • 2012-09-26
          相关资源
          最近更新 更多