跳转至

列表

创建列表

常用的列表创建方式有两种:字面量语法与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()包裹列表对象

1
2
3
l = list('foo')
for index, item in enumerate(l):
    print(index, item)
enumerate()接收一个可选的start参数,用于指定循环下标的初始值(默认为0):

1
2
3
4
5
6
l = list('foo')
for index, item in enumerate(l,10):
    print(index, item)
# 10 f
# 11 o
# 12 o

列表推导式

1
2
3
4
l = list(range(0,10))
results = [x*x for x in l if x > 4]
print(results)
#[25, 36, 49, 64, 81]

修改列表元素

1
2
3
4
5
>>> strs = ['ma','lin','kang']
#要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> strs[0]='M'
>>> strs
['M', 'lin', 'kang']

在列表中添加元素

1.在列表末尾添加元素

1
2
3
4
>>> strs = ['ma','lin','kang']
>>> strs.append('hello world')
>>> strs
['ma', 'lin', 'kang', 'hello world']

2.在列表中插入元素

1
2
3
4
>>> strs = ['ma','kang']
>>> strs.insert(1,'lin')
>>> strs
['ma', 'lin', 'kang']

从列表中删除元素

1.使用del语句删除元素

1
2
3
4
>>> strs = ['ma','lin','kang']
>>> del strs[1]
>>> strs
['ma', 'kang']

2.使用方法pop()删除元素

1
2
3
4
5
6
>>> strs = ['ma','lin','kang']
>>> strs.pop(1)
'lin'
>>> strs
['ma', 'kang']
>>>

3.根据值删除元素

1
2
3
4
5
6
7
8
9
>>> strs = ['ma','lin','kang']
>>> strs.remove('lin')
>>> strs
['ma', 'kang']
#方法remove()只删除第一个指定的值
>>> strs = ['ma','lin','kang','ma']
>>> strs.remove('ma')
>>> strs
['lin', 'kang', 'ma']

使用方法sort()对列表进行永久排序

1
2
3
4
5
6
7
8
>>> cars = ['bmw','audi','toyota','subaru']
>>> cars.sort()
>>> print(cars)
['audi', 'bmw', 'subaru', 'toyota']
#反向排序
>>> cars.sort(reverse=True)
>>> print(cars)
['toyota', 'subaru', 'bmw', 'audi']

使用函数sorted()对列表进行临时排序

1
2
3
4
5
6
7
>>> cars = ['bmw','audi','toyota','subaru']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']
>>> print(sorted(cars))
['audi', 'bmw', 'subaru', 'toyota']
>>> print(cars)
['bmw', 'audi', 'toyota', 'subaru']

翻转列表

1
2
3
4
5
6
>>> 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 表示步长,决定取元素的间隔和方向:

1
2
3
4
5
6
7
8
# 步长为 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 则无法向前匹配,返回空列表)