Python2.7.8 列表 list() 语句 for 循环迭代 remove() pop() len() 问题
列表、bytearray (字节数组) 对象,支持允许原-位修改对象的额外操作。 其它易变序列类型 (当被添加到语言时) 也应支持这些操作。 字符串、元组是不可变序列类型:这种对象一旦被创建,就不可再修改。 以下定义操作,适于易变序列类型 (其中 x 为任意对象)。
操作 | 结果 | 注意事项 | s = x | 以 x 替换 s 第 i 项 |
| s[i:j] = t | 以可迭代 t 的内容,替换 s 从 i 到 j的切片 |
| del s[i:j] | 等同 s[i:j] = [] |
| s[i:j:k] = t | 以 t 的那些元素,替换 s[i:j:k] 切片元素 | (1) | del s[i:j:k] | 从列表移除 s[i:j:k] 切片元素 |
| s.append(x) | 等同 s[len(s):len(s)] =[x] | (2) | s.extend(x) | 等同 s[len(s):len(s)] =x | (3) | s.count(x) | 返回 s == x 的 i 数量 |
| s.index(x[, i[, j]]) | 返回如 s[k] == x 且 i <= k k值 | (4) | s.insert(i, x) | 等同 s[i:i] = [x] | (5) | s.pop() | 等同 x = s; del s;return x | (6) | s.remove(x) | 等同 del s[s.index(x)] | (4) | s.reverse() | 原位反向 s 项 | (7) | s.sort([cmp[, key[,reverse]]]) | 原位排序 s 项 | (7)(8)(9)(10) |
迭代清除 remove() 问题
- a = list(range(10))
- a
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- for b in a:
- a.remove(b)
- a
- [1, 3, 5, 7, 9]
复制代码以上代码书写形式,无法完全清除列表内容,最后剩余 [1, 3, 5, 7, 9];原因在于每次移除项时,列表长度发生了变化,相应项也随之移位。
迭代清除 pop() 问题
- a = list(range(10))
- a
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- for b in list(range(len(a))):
- a.pop(b)
- Traceback (most recent call last):
- Python Shell, prompt 11, line 2
- IndexError: pop index out of range
- a
- [1, 3, 5, 7, 9]
复制代码以上代码书写形式,无法完全清除列表内容,最后剩余 [1, 3, 5, 7, 9],且还会出现 IndexError: pop index out of range;原因在于每次移除项时,列表长度发生了变化,相应项也随之移位。
迭代清除正确形式 - a = list(range(10))
- a
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- for b in list(range(len(a))):
- a.pop()
- a
- []
复制代码以上代码书写形式,可完全清除列表内容,最后剩余 [];原因在于移除项时,列表长度虽发生了变化,但每次只弹出 -1 索引项 (即:最后项),所以,不受列表长度变化,相应项移位影响。
请关注 "德云社区" 及其微信公众号,了解相关资讯
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|