| 
 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 <j 的最小 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 索引项 (即:最后项),所以,不受列表长度变化,相应项移位影响。  
 
请关注 "德云社区" 及其微信公众号,了解相关资讯  
版权声明: 
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
  
 |