在本文中,我们将学习有关Python列表的所有内容;如何创建它们、对列表进行切片、添加或删除其中的元素等等。
Python提供了一系列通常称为序列的复合数据类型。List是Python中使用最频繁且用途最广泛的数据类型之一。
在Python编程中,通过将所有项目(元素)放在方括号[]中并用逗号分隔来创建列表。
它可以具有任意数量的项目,并且它们可以具有不同的类型(整数,浮点数,字符串等)。
# 空 list my_list = [] # 整数list my_list = [1, 2, 3] # 具有混合数据类型的列表 my_list = [1, "Hello", 3.4]
同样,一个列表甚至可以将另一个列表作为项目。这称为嵌套列表。
# 嵌套 list my_list = ["mouse", [8, 4, 6], ['a']]
我们可以通过多种方式访问列表的元素。
我们可以使用索引运算符[]来访问列表中的项目。索引从0开始。因此,包含5个元素的列表的索引从0到4。
尝试访问其他元素,否则将引发IndexError。索引必须是整数。我们不能使用float或其他类型,这将导致TypeError。
使用嵌套索引访问嵌套列表。
my_list = ['p','r','o','b','e'] # 输出: p print(my_list[0]) # 输出: o print(my_list[2]) # 输出: e print(my_list[4]) # 错误! 仅整数可用于索引 # my_list[4.0] # 嵌套列表 n_list = ["Happy", [2,0,1,5]] # 嵌套索引 # 输出: a print(n_list[0][1]) # 输出: 5 print(n_list[1][3])
Python允许对其序列进行负索引。索引-1表示最后一项,-2表示倒数第二项,依此类推。
my_list = ['p','r','o','b','e'] # 输出: e print(my_list[-1]) # 输出: p print(my_list[-5])
我们可以使用切片运算符(冒号:)访问列表中的一系列项目。
my_list = ['p','r','o','g','r','a','m','i','z'] # 从第3元素至第5个元素 print(my_list[2:5]) # 从开始到第4个元素 print(my_list[:-5]) # 第6个元素至结束 print(my_list[5:]) # 元素开始到结束 print(my_list[:])
通过将索引考虑到如下所示的元素之间,切片可以得到最佳的可视化效果。如果我们想要访问一个范围,我们需要两个下标来从列表中分割那部分。
List是可变的,也就是说,它们的元素可以更改,而不像string或tuple。
我们可以使用赋值运算符(=)更改一个项目或一系列项目。
# 值列表 odd = [2, 4, 6, 8] # 改变第一个元素 odd[0] = 1 # 输出: [1, 4, 6, 8] print(odd) # 改变第2到第4项 odd[1:4] = [3, 5, 7] # 输出: [1, 3, 5, 7] print(odd)
我们可以使用append()方法将一个项目添加到列表中,或者使用extend()方法将多个项目添加到列表中。
odd = [1, 3, 5] odd.append(7) # 输出: [1, 3, 5, 7] print(odd) odd.extend([9, 11, 13]) # 输出: [1, 3, 5, 7, 9, 11, 13] print(odd)
我们还可以使用+运算符组合两个列表。这也称为串联。
*运算符重复给定次数的列表。
odd = [1, 3, 5] # 输出: [1, 3, 5, 9, 7, 5] print(odd + [9, 7, 5]) #输出: ["re", "re", "re"] print(["re"] * 3)
此外,我们可以使用insert()方法在需要的位置插入一个项,或者通过将多个项压缩到列表的一个空切片中来插入多个项。
odd = [1, 9] odd.insert(1,3) # 输出: [1, 3, 9] print(odd) odd[2:2] = [5, 7] # 输出: [1, 3, 5, 7, 9] print(odd)
我们可以使用关键字del从列表中删除一个或多个项。它甚至可以完全删除列表。
my_list = ['p','r','o','b','l','e','m'] # 删除一项 del my_list[2] # 输出: ['p', 'r', 'b', 'l', 'e', 'm'] print(my_list) # 删除多个项目 del my_list[1:5] # 输出: ['p', 'm'] print(my_list) # 删除所有列表 del my_list # Error: List not defined print(my_list)
我们可以使用remove()方法删除给定项目,也可以使用pop()方法删除给定索引处的项目。
如果未提供索引,则pop()方法将删除并返回最后一项。这有助于我们将列表实现为堆栈(先进先出数据结构)。
我们还可以使用该clear()方法清空列表。
my_list = ['p','r','o','b','l','e','m'] my_list.remove('p') # 输出: ['r', 'o', 'b', 'l', 'e', 'm'] print(my_list) # 输出: 'o' print(my_list.pop(1)) # 输出: ['r', 'b', 'l', 'e', 'm'] print(my_list) # 输出: 'm' print(my_list.pop()) # 输出: ['r', 'b', 'l', 'e'] print(my_list) my_list.clear() # 输出: [] print(my_list)
最后,我们还可以通过为元素切片分配一个空列表来删除列表中的项目。
>>> my_list = ['p','r','o','b','l','e','m'] >>> my_list[2:3] = [] >>> my_list ['p', 'r', 'b', 'l', 'e', 'm'] >>> my_list[2:5] = [] >>> my_list ['p', 'r', 'm']
下面列出了Python编程中list对象可用的方法。
它们以list.method()方式访问。上面已经使用了某些方法。
Python列表方法的一些示例:
my_list = [3, 8, 1, 6, 0, 8, 4] # 输出: 1 print(my_list.index(8)) # 输出: 2 print(my_list.count(8)) my_list.sort() # 输出: [0, 1, 3, 4, 6, 8, 8] print(my_list) my_list.reverse() # 输出: [8, 8, 6, 4, 3, 1, 0] print(my_list)
列表理解是从Python现有列表中创建新列表的一种简洁明了的方法。
列表理解包含一个表达式,后跟方括号内的for语句。
这是一个列出每项增加2的幂的示例。
pow2 = [2 ** x for x in range(10)] # 输出: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] print(pow2)
此代码等效于
pow2 = [] for x in range(10): pow2.append(2 ** x)
列表推导可以选择包含更多for或if语句。可选if语句可以过滤出新列表的项目。这里有些示例。
>>> pow2 = [2 ** x for x in range(10) if x > 5] >>> pow2 [64, 128, 256, 512] >>> odd = [x for x in range(20) if x % 2 == 1] >>> odd [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] >>> [x+y for x in ['Python ','C '] for y in ['Language','Programming']] ['Python Language', 'Python Programming', 'C Language', 'C Programming']
我们可以使用关键字in来测试一个项目是否存在于一个列表中。
my_list = ['p','r','o','b','l','e','m'] # 输出: True print('p' in my_list) # 输出: False print('a' in my_list) # 输出: True print('c' not in my_list)
使用for循环,我们可以遍历列表中的每个项目。
for fruit in ['apple','banana','mango']: print("I like",fruit)