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()快)?
但如果你传递任何项目list
, list
尝试迭代它来建立一个新的列表。
从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
。
上一篇: What is the difference between implementation of list() and [] in py3.x?