py3.x中list()和[]的实现有什么区别?

以下是示例代码1及其结果。

d ={
    "name":"looser",
    "roll":6666,
    "profile" : "developer"
}

print("list formatted dict is {}".format([d]))

for k,v in [d.items()]:
    if d[k] is "developer":
        d.pop(k)
    else:
        print(k)

结果:

list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}]
Traceback (most recent call last):
  File "/Users/rough/try.py", line 18, in <module>
    for k,v in [d.items()]:
ValueError: too many values to unpack (expected 2)

Process finished with exit code 1

以下是修改后的代码示例。

d ={
    "name":"looser",
    "roll":6666,
    "profile" : "developer"
}

print("list formatted dict is {}".format([d]))

for k,v in list(d.items()):
    if d[k] is "developer":
        d.pop(k)
    else:
        print(k)

结果:

list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}]
name
roll

Process finished with exit code 0

很多地方的人告诉我没有什么区别,是不是真的没有什么区别。如果没有区别那么为什么会有这样的结果。

因为我正在解决** RuntimeError的问题:在迭代过程中字典已更改大小**


以下几乎没有区别:

a = list()

a = []

除了名称查找和内置[]所花费的时间(为什么[]比list()快)?

但如果你传递任何项目listlist尝试迭代它来建立一个新的列表。

help(list)输出:

班级列表(对象)

| list() - >新的空列表

| 列表(可迭代) - >从迭代项目初始化的新列表

所以创建list对象时有2个“模式”。

尝试list(3)你会得到TypeError: 'int' object is not iterable错误,尝试[3]你会得到一个列表,其中有1个元素。

传递d.items()对象时,这并没有什么不同。

  • list(d.items())将项目迭代/转换为元组列表。
  • [d.items()]在里面创建一个包含单个元素的列表: d.items() (这解释了对2个元素的解包失败)
  • 还要注意, for k,v in list(d.items()):除非您想在字典上迭代时从字典中移除项目(这似乎是您遇到的问题,看到您最近的编辑)

    除此之外,不需要转向列表,因为d.items()已经可以迭代,并且将它包装在列表中并没有什么用处(它甚至更慢)


    []是一个文字,它会按照您的定义创建列表。 ['a']是包含一个项目的列表。 [d.items()]也是一个包含一个项目的列表。 这一项是很多项目,但没有解压到k, v

    list()是需要一个迭代器来创建一个新列表的构造器形式。 list('a')等于['a']list('ab')等于['a', 'b'] ; 它遍历可迭代的字符串'ab'list(d.items())在所有的项目迭代d.items()并创建列表[('name', 'looser'), (...)] ; 这是一个包含许多两项元组的列表,它们分别解压到k, v

    链接地址: http://www.djcxy.com/p/31701.html

    上一篇: What is the difference between implementation of list() and [] in py3.x?

    下一篇: Python's equivalent for define