之间的区别如果我们有一个列表s
,调用list(s)
与s[:]
之间是否有区别?在我看来,他们都创建了具有s
的确切元素的新列表对象。列表()与[:]
Q
列表()与[:]
0
A
回答
4
在这两种情况下,他们应该创建一个(浅)副本的列表。
注意,有一个角落的情况下(这几乎是值得一提的),它可能会在不同的...
list = tuple # Don't ever do this!
list_copy = list(some_list) # Oops, actually it's a tuple ...
actually_list_copy = some_list[:]
随着中说,没人神智清醒应该永远阴影内建list
就是这样。
我的建议,使用无论你觉得更容易阅读,并在当前的情况下很好地工作。
list(...)
使得它明确的输出是一个列表,并会做一个清单出来任何迭代。something[:]
是“给我一个这个序列的浅拷贝,我真的不在乎它是什么样的序列......”,但它不适用于任意迭代。
1
list()更好 - 它更具可读性。除此之外,没有区别。
0
我没有意识到,但正如ventsyv提到的,s[:]
和list(s)
都创建s
的副本。 请注意,您可以检查的目的是使用is
和id()
可以用来获取对象的内存地址实际上看它们是否相同或不相同。
>>> s = [1,2,3]
>>> listed_s = list(s)
>>> id(s)
44056328
>>> id(listed_s) # different
44101840
>>> listed_s is s
False
>>> bracket_s = s[:]
>>> bracket_s is s
False
>>> id(bracket_s)
44123760
>>> z = s # points to the same object in memory
>>> z is s
True
>>> id(z)
44056328
>>>
ID(...) ID(对象) - >整数
Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (Hint: it's the object's memory address.)
1
简短的回答是使用list()
。在谷歌键入python [:]
然后键入python list
。
如果s是一个列表,则没有什么区别,但总是有一个列表?或者它可能是一个序列或一个发生器?
In [1]: nums = 1, 2, 3
In [2]: nums
Out[2]: (1, 2, 3)
In [3]: nums[:]
Out[3]: (1, 2, 3)
In [4]: list(nums)
Out[4]: [1, 2, 3]
In [7]: strings = (str(x) for x in nums)
In [8]: strings
Out[8]: <generator object <genexpr> at 0x7f77be460550>
In [9]: strings[:]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-358af12435ff> in <module>()
----> 1 strings[:]
TypeError: 'generator' object has no attribute '__getitem__'
In [10]: list(strings)
Out[10]: ['1', '2', '3']
相关问题
- 1. Python列表+列表与list.append()
- 2. 与列表比较列表
- 3. 删除列表与列表
- 4. 列表与阵列
- 5. 与列表
- 6. Django'objects.filter()'与列表?
- 7. 列表与LINQ
- 8. 与列表框
- 9. 与表列
- 10. 与表列表填充下拉列表
- 11. 与幽灵列HTML表列
- 12. 煎茶列表与列线
- 13. 链表列表与递归
- 14. 与列表框同步列表?
- 15. 邻接列表错误与列表
- 16. 管理列表和子列表与MySQL
- 17. 渲染列表的列表与StringTemplate的
- 18. 列表<>与多个列表C#
- 19. C#散列表与C++散列表
- 20. 顺序列表的列表与另一
- 21. 拼合列表的列表与一捻
- 22. 列表视图列表与onPostExecute
- 23. 比较列表与扭曲列表
- 24. 如何将列表与列表配对?
- 25. 列表与小数
- 26. 与数组列表
- 27. 与列表<>
- 28. 与下拉列表
- 29. 列表与对象
- 30. 线程与列表
不是说它是超级重要的,但'':'''一般优于'list()'。运行一个简单的'timeit'测试,列表'[1,2,3]'得到'list()'的0.9552267117748205'和[[:]'的'0.4996651809098642'。但就像我说的,这有点挑剔;在大多数情况下,时差可以忽略不计。 – iCodez 2014-11-07 01:17:29
@iCodez - 这是真的,我以前遇到过。理由是'list(...)'需要一个全球性的查询,这个查询有点贵。而且全局查找是必需的,因为用户隐藏“list”的疯狂情况。通过切片,方法查找只进行一次(在字节码生成期间),并简单地在对象上调用。可能还有其他原因。 。 。该实现可能会优化'list .__ getitem__',因为它可以很容易地知道输出中对象的内存位置,但'list'可能会诉诸多次调用'.next()'...... – mgilson 2014-11-07 01:21:10