我正在建立一份清单清单.我正在读取输入文件中的元素.我正在读取文件中的每一行作为字符串单元素到列表中的子列表.首先,我创建了列表列表:
>>> b = [[]] * 5
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试追加项目时,我得到以下内容:
>>> b[1].append("abc")
>>> b
[ ['abc'], ['abc'], ['abc'], ['abc'], ['abc'])
Run Code Online (Sandbox Code Playgroud)
为什么要append更改所有子列表?就是insert()在这种情况下更好?
当你这样做时[[]] * 5,重复5次的是相同对象(这里为空列表)的列表.
你可以通过以下方式检查:
>>> b = [[]] *5
>>> b
[[], [], [], [], []]
>>> id(b[0])
140588316211896
>>> id(b[1])
140588316211896
Run Code Online (Sandbox Code Playgroud)
你需要做的是:
>>> b = [[] for i in range(5)]
>>> b[0].append('abc')
>>> b
[['abc'], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)
在[[] for i in range(5)]每个循环中,创建一个新的空列表对象.
插入在这里不是一个好选择,因为insert是一个O(n)操作,而append将是O(1).
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |