之間的區別如果我們有一個列表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. 與列表列
- 2. Python列表+列表與list.append()
- 3. 刪除列表與列表
- 4. 與列表比較列表
- 5. PredicateBuilder列表與C列表內列表#
- 6. 列表與陣列
- 7. 與列表框
- 8. 與列表
- 9. 與列表
- 10. AngularJS與列表
- 11. Python列表與
- 12. lapply與列表
- 13. 與Prolog列表
- 14. 與表列
- 15. Django'objects.filter()'與列表?
- 16. jQuery.param與列表
- 17. 與列表
- 18. 與列表
- 19. 列表與LINQ
- 20. 列表框與列表值critery報表
- 21. 與表列表填充下拉列表
- 22. 煎茶列表與列線
- 23. Hector-getting列與ColumnFamilyResult列表
- 24. 與幽靈列HTML表列
- 25. 列表Compherension與子表
- 26. 鏈表列表與遞歸
- 27. 列表框SelectedItem與列表集合
- 28. 瞭解減少與列表的列表
- 29. 類別列表與列表類別
- 30. 管理列表和子列表與MySQL
不是說它是超級重要的,但'':'''一般優於'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