列表
创建列表
常用的列表创建方式有两种:字面量语法与list()内置函数。
内置函数list(iterable)则可以把任何一个可迭代对象转换为列表,比如字符串:
| >>> list('foo')
['f', 'o', 'o']
|
访问列表元素
| >>> strs = ['ma','lin','kang']
>>> strs
['ma', 'lin', 'kang']
#用len()函数可以获得list元素的个数:
>>> len(strs)
3
#用索引来访问list中每一个位置的元素,记得索引是从0开始的
>>> strs[1]
'lin'
#如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素
>>> strs[-1]
'kang'
#以此类推,可以获取倒数第2个、倒数第3个
>>> strs[-3]
'ma'
|
遍历列表
假如你想在遍历的同时,获取当前循环下标,可以选择用内置函数enumerate()包裹列表对象
| l = list('foo')
for index, item in enumerate(l):
print(index, item)
|
enumerate()接收一个可选的start参数,用于指定循环下标的初始值(默认为0):
| l = list('foo')
for index, item in enumerate(l,10):
print(index, item)
# 10 f
# 11 o
# 12 o
|
列表推导式
| l = list(range(0,10))
results = [x*x for x in l if x > 4]
print(results)
#[25, 36, 49, 64, 81]
|
修改列表元素
| >>> strs = ['ma','lin','kang']
#要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> strs[0]='M'
>>> strs
['M', 'lin', 'kang']
|
在列表中添加元素
1.在列表末尾添加元素
| >>> strs = ['ma','lin','kang']
>>> strs.append('hello world')
>>> strs
['ma', 'lin', 'kang', 'hello world']
|
2.在列表中插入元素
| >>> strs = ['ma','kang']
>>> strs.insert(1,'lin')
>>> strs
['ma', 'lin', 'kang']
|
从列表中删除元素
1.使用del语句删除元素
| >>> strs = ['ma','lin','kang']
>>> del strs[1]
>>> strs
['ma', 'kang']
|
2.使用方法pop()删除元素
| >>> strs = ['ma','lin','kang']
>>> strs.pop(1)
'lin'
>>> strs
['ma', 'kang']
>>>
|
3.根据值删除元素
| >>> strs = ['ma','lin','kang']
>>> strs.remove('lin')
>>> strs
['ma', 'kang']
#方法remove()只删除第一个指定的值
>>> strs = ['ma','lin','kang','ma']
>>> strs.remove('ma')
>>> strs
['lin', 'kang', 'ma']
|
使用方法sort()对列表进行永久排序
| >>> cars = ['bmw','audi','toyota','subaru']
>>> cars.sort()
>>> print(cars)
['audi', 'bmw', 'subaru', 'toyota']
#反向排序
>>> cars.sort(reverse=True)
>>> print(cars)
['toyota', 'subaru', 'bmw', 'audi']
|
使用函数sorted()对列表进行临时排序
| >>> cars = ['bmw','audi','toyota','subaru']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']
>>> print(sorted(cars))
['audi', 'bmw', 'subaru', 'toyota']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']
|
翻转列表
| >>> cars = ['bmw','audi','toyota','subaru']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']
>>> cars.reverse()
>>> print(cars)
['subaru', 'toyota', 'audi', 'bmw']
|
切片
切片的完整语法格式为:sequence[start:stop:step]。
切片的核心规则:
1. 左闭右开:区间包含起始索引 start,但不���含结束索引 stop。
2. 默认值:不指定 start 默认从开头(下标 0)开始;不指定 stop 默认切到末尾;不指定 step 默认步长为 1。
3. 越界宽容:切片不会像单个索引那样抛出 IndexError 异常,超出范围的下标会自动截断。
基础切片与负索引
| l = list(range(0, 10))
print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 不写 start 和 stop 时,默认从头切到尾
print(l[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 结束索引为 -1(等价于 len - 1),由于左闭右开,不包含最后一个元素 9
print(l[:-1]) # [0, 1, 2, 3, 4, 5, 6, 7, 8]
# 从倒数第 1 个元素切到末尾
print(l[-1:]) # [9]
# -2 对应下标 8,结束索引 9(不包含下标 9 对应的元素 9)
print(l[-2:9]) # [8]
print(l[-2:]) # [8, 9](若要包含末尾元素,stop 直接留空即可)
|
步长 step 语法
第三个参数 step 表示步长,决定取元素的间隔和方向:
| # 步长为 2:隔一个取一个(获取偶数下标元素)
print(l[::2]) # [0, 2, 4, 6, 8]
print(l[1::2]) # [1, 3, 5, 7, 9](从下标 1 开始,获取奇数)
# 步长为负数:表示从右往左倒序切片
print(l[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0](快速翻转列表)
print(l[5:2:-1]) # [5, 4, 3](从下标 5 倒序切到下标 2,不包含下标 2)
print(l[5:2]) # [](默认 step=1 是向右走的,若 start > stop 则无法向前匹配,返回空列表)
|