【零基础学Python】列表和元组

194 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情


一、什么是列表和元组

Python中的列表和元组就对应于其它编程语言的数组。

列表和元组的大部分功能都差不多,但有一个非常重要的差异,就是列表中的元素可变,创建以后随时可以修改;而元组中国内的元素不可变,创建以后无法修改,如果非要修改,只能重新创建一个元组。


二、列表的创建、访问和修改

1.创建列表

可以直接用[]表示一个列表,也可用list这一内置函数来创建,具体如下。

# 创建列表
# []表示一个空列表
list1 = []
list2 = list()

print(type(list1))
print(type(list2))

运行结果如下,可知list1、list2均是列表类型。

在这里插入图片描述


  • 列表在用[]创建时可以直接给定初始值
  • 同一个列表里可以放不同类型的变量(这里和C/C++的数组差别很大)
  • 用print可以直接打印列表中的全部内容
# 可以在创建时直接给定初始值
list1 = [1, 2, 3, 4]
print(list1) # 可以直接打印列表的全部内容

# 列表里可以放不同类型的数据
list2 = [1, 'hello', True, [2, 3, 4]]
print(list2)

运行结果如下。

在这里插入图片描述


2.下标访问

列表里可以管理很多元素,通过下标来访问到列表中的元素,注意用下标访问时操作符也是[],可读可写,像C/C++访问数组时的[]一样,而且下标同样也是从0开始计的。

list2 = [1, 'hello', True, [2, 3, 4]]
print(list2)
print(list2[0]) # 读
print(list2[2]) # 读

list2[1] = 'world' # 写
print(list2)

运行结果如下,下标不仅可以读出列表内的数据,也可进行修改。

在这里插入图片描述


Python的列表用下标访问时,下标为负数,具体看下面的代码及注释。

a = [1, 2, 3, 4, 5]
print(len(a))  # len函数返回列表a的长度
print(a[-2])  # 下标为-2,等价于len(a) - 2
print(a[len(a) - 2])  # 访问倒数第二个元素

在这里插入图片描述


3.切片

通过下标一次可以取出一个列表数据,而通过切片一次可以取出若干个列表数据,也即取出一个子列表,所以切片其实就是多次下标操作的重复。

a = [1, 2, 3, 4] 
print(a[1:3])  # 结果为2,3

切片操作中,[1:3]表示了一段区间,1表示区间开始的下标,3表示区间结束的下标,这个区间同样是左闭右开的,所以最后的结果为2,3。


下面是切片的一些其他写法。

a = [1, 2, 3, 4]
print(a[1:3])
print(a[1:])  # 省略右边界,即取到整个列表结束
print(a[:3])  # 省略左边界,即从整个列表开始取

在这里插入图片描述 这里要说明切片是一个比较高效的操作,在进行切片时只是取出了原有列表中的一部分,而不涉及数据的拷贝。


切片时还可以指定步长,步长也可以为负数,表示从后往前取。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[0:11:1])
print(a[::2])  # 从头取到尾,步长为2

在这里插入图片描述


4.循环遍历列表

for i in range(0, len(a)):
    a[i] += 10
print(a)

在这里插入图片描述


要注意下面这种循环,将a中的元素赋值给data后对data的操作不会影响到a,而上面直接通过下标访问是可以直接对a修改的。

a = [1, 2, 3, 4, 5]
for data in a:
    data += 2
    print(data)

print(a)

在这里插入图片描述


5.插入数据

(1)append

首先要注意这里的append并不是一个独立的函数,它要通过列表创建出的对象来调用,实际是一个对象的方法(类比C++中的类)。

append的作用是直接在列表的末尾插入数据。

# 1.append在末尾插入数据
a = [1, 2.2, 3, 4]
print(a)
# 注意append的调用方式,通过.来使用
a.append(5)  # 在列表末尾插入整型5
a.append("hello")  # 在列表末尾插入字符串"hello"
print(a)

在列表末尾依次插入整型5和字符串"hello"。 在这里插入图片描述


(2)insert

insert同样是通过一个列表对象来调用,它的作用是在列表的指定位置插入一个数据。

# 2.insert在任意位置插入数据
a = [1, 2.2, 3, 4]
print(a)
a.insert(1, 'hello') # 在下标为1(从0开始)的位置插入'hello'
# 插入的位置超出列表长度,直接在末尾加入数据
a.insert(20, 200)
print(a)

需要注意的是列表的下标仍是从0开始,并且如果指定的位置比列表的长度更大,那么插入的位置就是列表的最后,此时insert的作用与append相同。

在这里插入图片描述


6.查找数据

(1)in和not in

in和not in不是列表的方法,所以调用时不需要像插入数据时调用的append和insert一样使用列表对象。

in表示某个元素在列表中,not in表示某个元素不在列表中,返回值是一个布尔类型,即True或False。

# 1.使用in和not in来判断某个元素是否在列表中
# 返回True或False
a = [1, "python", 3.14]
print(1 in a)
print(5 in a)
print("C" in a)
print(2 not in a)

运行结果如下,结果很容易理解。 在这里插入图片描述


(2)inedx

index是列表的方法,需要通过列表对象来访问。

若查找的数据存在,则返回值是对应数据在数组中的下标,若不存在则抛出异常。

这里要注意与C/C++中的查找操作区分,它们在查找不到数据时返回-1,因为-1在这些语言中针对数组时是无意义的。而Python的列表中-1是有意义的,所以不会返回-1,要注意区分。

# 2.使用index来判定当前元素是否存在
# 若存在则返回下标,否则抛出异常
a = [1, "python", 3.14]
print(a.index('python'))  # 存在,返回下标
print(a.index(9))  # 不存在,抛异常

在这里插入图片描述


7.删除数据

(1)pop

用pop来删除数据,不传入参数时删除列表末尾的数据,传入参数(下标位置)时删除对应位置的数据,若下标超出列表范围则抛出异常。

# 1.用pop删除列表末尾的数据
a = [1, 2, 3, 4]
a.pop() # 删除4
print(a)

# 2.用pop删除列表任意位置的数据
a = [1, 2, 3, 4]
a.pop(1) # 删除下标为1的数据,即整型2
print(a)

a.pop(50) # 抛异常
print(a)

在这里插入图片描述


(2) remove

remove可以针对列表中指定的值进行删除,若列表中不存在指定的值会抛出异常。

# 3.remove删除指定的值
a = ['1', 'a', '3']
a.remove('1')
print(a)
a.remove(1)
print(a)

在这里插入图片描述


8.列表的拼接

(1)+

使用+拼接时,拼接的结果是一个新的列表,不会影响原来的列表。

# 列表拼接
# 1.+
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(a)
print(b)
print(c)

可以看到a、b均未发生变化,生成的c是一个全新的列表。 在这里插入图片描述


(2)extend

# 2.extend
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
print(b)

a通过.调用了extend,将b列表添至a之后,a列表被改变,b列表仍不变。

在这里插入图片描述


(3)+=

+=的逻辑与extend基本相同,但是底层实现差异很大,这里暂且不深入介绍。

# 3. +=
a = [1, 2, 3]
b = [4, 5, 6]
a += b
print(a)
print(b)

在这里插入图片描述


三 、元组

1.元组的创建和访问

关于元组的创建和访问,与列表基本相同,可以类比关于列表的介绍进行学习,下面仅给出例子和必要的介绍,不过多赘述。

(1)创建

# 1.用()来创建元组
a = (1, 2, 3)
print(type(a))
print(a)
b = tuple()
print(type(b))
print(b)

(2)访问

切片

注意下标从0开始,以及区间的左闭右开。

# 1.切片
a = (1, 2, 3, 4)
print(a[1:3])

在这里插入图片描述


循环

注意语法格式。

# 2.for循环
a = (1, 2, 3, 4)
for data in a:
    print(data)

在这里插入图片描述


查找

# 3.in和index查找
a = (1, 2, 3, 4)
print(3 in a)
print(a.index(2))

在这里插入图片描述


拼接

# 4. +和+=
a = (1, 2, 3)
b = (4, 5)
c = a + b
print(a)
print(b)
print(c)
a += b
print(a)
print(b)

在这里插入图片描述


(3)修改

由于元组只能读不能写,所以上述列表中各种修改数据的方法、函数都无法在元组下使用,这是二者最大的区别。


感谢阅读,如有错误请批评指正