list()函数混淆

时间:2018-05-12 19:21:22

标签: python python-3.x list

我不明白list功能的工作原理。

以下是我所做的研究:

我正在查看的文档:

documentation

特别是,我正在看这一段:

  

class list([iterable])返回其项目相同的列表   与iterable的项目相同的顺序。 iterable可以是一个序列,   支持迭代的容器或迭代器对象。如果   iterable已经是一个列表,一个副本被创建并返回,类似于   可迭代[:]。例如,列表(' abc')会返回[' a',' b'' c']和   list((1,2,3))返回[1,2,3]。如果没有给出参数,则返回   一个新的空列表,[]。

     

list是一个可变序列类型,如序列类型中所述 -   str,unicode,list,tuple,bytearray,buffer,xrange。对于其他   容器看到内置的dict,set和tuple类,以及   收藏模块。

这是另一篇文章:

Another post about the list function

在该帖子上,有人发布了以下内容:

>>> myList = ['hello']
>>> myList=list(myList[0])
>>> myList
['h', 'e', 'l', 'l', 'o']

但是当我这样做时:

for root, dirs, files in os.walk(os.getcwd()):
     path_files.append(files)

path_files
[['combinedPdfs.py', 'meetingminutes.pdf', 'meetingminutes_encrypted.pdf', 'pdf_intro.py', 'pdf_paranoia.py', 'readDocx.py']]

>>> path_files_2 = list(path_files[0])
>>> path_files_2
['combinedPdfs.py', 'meetingminutes.pdf', 'meetingminutes_encrypted.pdf', 'pdf_intro.py', 'pdf_paranoia.py', 'readDocx.py']
>>> path_files_2[0]
'combinedPdfs.py'
>>> path_files_2[1]
'meetingminutes.pdf'

为什么我的工作方式与其他帖子的用户不同?

编辑#1:

如果我运行这样的事情:

>>> myList2 = ['hello', 'goodbye']
>>> myList2[0]
'hello'
>>> myList2 = list(myList2)
>>> myList2
['hello', 'goodbye']
>>> myList2  = list(myList2[0])
>>> myList2
['h', 'e', 'l', 'l', 'o']

如果我运行这样的事情:

>>> myList4 = [['Hello', 'goodbye']]
>>> myList4 = list(myList4)
>>> myList4
[['Hello', 'goodbye']]
>>> myList4 = list(myList4[0])
>>> myList4
['Hello', 'goodbye']

我看到了这个定义,但我希望有一个更多的" laymans"解释它的方式。

1 个答案:

答案 0 :(得分:2)

使用名为path_files的列表,此列表实际上是列表中的列表。您可以看到这一点,因为列表末尾有双方括号,例如: [['combinedPdfs.py', ..., 'readDocx.py']]。单个列表只有一组方括号。

命令>>> path_files = list(path_files)[0]本质上是将列表中的第一个项目作为列表返回。因此,对于['hello']列表,它会将hello分成单独的字符。通过列表,它突破了列表中的第一项(在本例中为另一个列表),并将其分解为自己的列表。

虽然我看不到您定义的位置path_files_2(我假设它与新path_files相同),但当您输入path_files_2[0]时,您要回复第一项列表(零索引)。

我通常不会将其视为"列表功能"而是#34;列表数据类型"有自己的方法。当您输入list(...)时,我不会将其视为"功能"而是作为数据类型的方法将一种数据类型转换为列表数据类型。