Python 列表

在Python语言中,列表list是可变对象,列表中可存放任意且不同类型的对象。

1.创建列表

# (1)直接创建
lst = [1, 2, 'a']
# (2)创建空列表然后添加元素
lst2 = []
lst2.append(1)
# (3)将其他可迭代对象转换成列表
lst3 = list('12a')

除此之外,还有一种常用生成方法——列表生成式。这种方式书写简洁且功能强大。

# 生成10以内偶数列表集合
lst = [i for i in range(10) if i % 2 == 0]
print(lst)


# 输出:[0, 2, 4, 6, 8]

2.列表合并

(1)append(n),将n整体作为元素添加

lst = [i for i in range(10) if i % 2 == 0]
n = [10]
lst.append(n)
print(lst)

# 输出:[0, 2, 4, 6, 8, [10]]

(2)extend(n),上面的结果大概率不是我们想要的,我们想要添加的是元素10而不是一个列表。

因此需要用到extend

lst = [i for i in range(10) if i % 2 == 0]
n = [10]
lst.extend(n)
print(lst)


# 输出:[0, 2, 4, 6, 8, 10]

(3)使用拼接符号“+”

lst = [i for i in range(10) if i % 2 == 0]
n = [10]
lst += n
print(lst)


# 输出: [0, 2, 4, 6, 8, 10]

3.访问元素

(1)通过索引index

lst = [0, 2, 4, 6, 8, 10]
print('第一个和最后一个元素分别是:', lst[0], lst[-1])


# 输出: 第一个和最后一个元素分别是: 0 10

 当尝试访问一个超出列表范围的索引时,会报错

lst = [0, 2, 4, 6, 8, 10]
try:
    print(lst[6])
except Exception as e:
    print(e)


# 输出:list index out of range

(2)遍历

lst = [0, 2, 4, 6]
for i in range(len(lst)):
    print('第{}个元素是{}'.format(i, lst[i]))


# 输出: 第0个元素是0
#       第1个元素是2
#       第2个元素是4
#       第3个元素是6

其他常用遍历方式

# 直接遍历元素
lst = [0, 2, 4, 6]
for l in lst:
    print(l)

# 同时得到索引和值
for index, value in enumerate(lst):
    print('第{}个元素是{}'.format(index, value))

(3)切片

切片并不是列表独有的,元组和字符串也可以。注意切片范围是左闭右开。

①基本用法

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# [起始:结束:步长],起始默认0,结束默认最后,步长默认1
print(lst[0:10:2])


# 输出:[0, 2, 4, 6, 8]

②利用切片实现列表拷贝和逆序

lst = [0, 1, 2, 3, 4, 5]
lst2 = lst[:]
lst3 = lst
lst[0] = '被改变了'
print(lst, lst2, lst3)


# 输出:['被改变了', 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5] ['被改变了', 1, 2, 3, 4, 5]

赋值只是传递了引用,即lst3和lst指向同一个对象,而list是可变对象。因此,改变这个对象的第一个元素,lst3的第一个元素也被改变了。同时,[:]这种方式相当于是做了一次拷贝,因此不受影响。(更多关于可变性与拷贝的知识,请参看我的另一个总结)Python 深拷贝和浅拷贝_Jiangugu的博客-CSDN博客Python 可变性与深浅拷贝https://blog.csdn.net/qq_45055172/article/details/121383198

# 步长为负数,就表示从后往前取
lst = [0, 1, 2, 3, 4, 5]
print('原列表逆序排列后为:', lst[::-1])


# 输出:原列表逆序排列后为: [5, 4, 3, 2, 1, 0]

③利用切片修改列表元素

注意事项:通过切片得到的仍然是一个列表,因此,等号右边也应该是一个等长度的列表才能完成元素替换修改。

lst = [0, 1, 2, 3, 4, 5]
lst[:3] = ['a', 'b']
print(lst)


# 输出:['a', 'b', 3, 4, 5]
lst = [0, 1, 2, 3, 4, 5]
lst[::2] = ['_'] * 3
print(lst)


# 输出:['_', 1, '_', 3, '_', 5]

 ['_'] * 3,这种写法也容易产生一些陷阱。

# lst=[[0,0,0],[0,0,0]],第一次乘3,表示复制了2次0;
# 第二次乘2,表示把列表“复制”了一次,两个列表其实是同一个对象。
lst = [[0] * 3]*2
lst[0][0] = 1
print(lst)


# 输出:[[1, 0, 0], [1, 0, 0]]

④切片解决了索引越界问题

lst = [0, 2, 4, 6, 8, 10]
print('获取列表前10个元素:', lst[:10])


# 输出:[0, 2, 4, 6, 8, 10]

3.检索和统计

(1)判断元素是否存在

lst = [0, 2, 4, 6, 8, 10]
print('元素3{}列表中'.format('在' if 3 in lst else '不在'))


# 输出:元素3不在列表中

(2)获得元素在列表中第一次出现位置

lst = [0, 2, 4, 6, 8, 10]
print('元素2在列表中位置:{}'.format(lst.index(2)))


# 输出:元素2在列表中位置:1

(3)统计元素出现次数

lst = [0, 2, 4, 6, 8, 2]
print('元素2在列表中出现次数:{}'.format(lst.count(2)))


# 输出:元素2在列表中出现次数:2

(4)求和(元素全部为数字)

lst = [0, 2, 4, 6, 8, 2]
print('所有元素之和:{}'.format(sum(lst)))


# 输出:所有元素之和:22

4.排序

list对象自身实现了sort方法,也可以调用python通用的sorted方法。需要注意的是,一个无返回,一个有返回。

lst = [4, 2, 0, 6, 8]
# lst.sort()方法无返回,不能赋值给新的变量
lst.sort()
print('顺序排序{}'.format(lst))
# sorted方法有返回
r_lst = sorted(lst, reverse=True)
print('逆序排序{}'.format(r_lst))

# 输出:顺序排序[0, 2, 4, 6, 8]
#       逆序排序[8, 6, 4, 2, 0]

进一步,sorted是产生了一个新的对象,通过查看id可知

lst = [4, 2, 0, 6, 8]
print(id(lst))
lst.sort()
print(id(lst))
r_lst = sorted(lst, reverse=True)
print(id(r_lst))


# 输出:1831577473544
#       1831577473544
#       1831577474056

5.删除

lst = [4, 2, 0, 6, 8]
# 删除元素
del lst[0]
print(lst)
# 删除列表
del lst


# 输出:[2, 0, 6, 8]

你可能感兴趣的:(基础语法,python,开发语言,后端)