Python 3 中,列表推导、生成器表达式以及集合推导、字典推导中,有自己的局部作用域,表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以正常引用,局部变量并不影响它们。
x = 'ABC'
dummy = [ord(x) for x in x]
print(x)
# 'ABC'
print(dummy)
# [65, 66, 67]
但是在python2.x
中,同名变量会相互影响。
Python 切片
基本语法
slice(stop)
slice(start, stop[, step])
例子:
>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s = slice(3)
>>> s
slice(None, 3, None)
>>> a[s] # a[:3]
[0, 1, 2]
>>> s = slice(2, 8)
slice(2, 8, None)
>>> a[s] # a[2:8]
[2, 3, 4, 5, 6, 7]
>>> s = slice(2,8,2)
slice(2, 8, 2)
>>> a[s] # a[2:8:2]
[2, 4, 6]
特殊用法:
- a的拷贝
>>> slice(None)
slice(None, None, None)
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# a[None:None]
# a[slice(None)]
- 反向
>>> a = list(range(10))
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> a[::-2]
[9, 7, 5, 3, 1]
>>> a[3::-1]
[3, 2, 1, 0]
小计:
- 当
step
为正数的时候,start < end
,否则结果为[]
- 当
step
为负数的时候,start > end
,否则结果为[]
-6 -5 -4 -3 -2 -1
0 1 2 3 4 5
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
切片赋值
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # replace some values
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # now remove them
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # clear the list by replacing all the elements with an empty list
>>> letters[:] = []
>>> letters
[]