列表与元组

列表

◆基本概念

➢列表是有序的元素集合,所有元素放在一对中括号中,用逗号隔开,没有长度限制;
➢列表索引值以0为开始值,-1为从末尾的开始位置。
➢列表可以使用+操作符进行拼接,使用*表示重复。
➢当列表元素增加或删除时,列表对象自动进行扩展或收缩内存,保证元素之间没有缝隙;

◆列表元素可以通过索引访问单个元素

a=[4,2,3,6,6,9,5, 8, 1] 
a[3]= 6
a[0]=4
a[9] =?     //报错

◆列表

➢列表可以完成大多数集合类的数据结构实现。
➢列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
➢元组、集合、列表都可以作为列表

◆列表元素修改

➢列表大小没有限制,可以随时修改
➢列表元素变可随时修改

>>> a=[4,2,3,6,6,9,5,8,1]
>>> a.insert(0, 1)   //在0的位置插入1
>>> a 
[1,4,2,3,6,6,9,5,8,1]
>>> a[0]= 10    //将0位置上更改为10
>>> a
[10, 4,2,3, 6,6,9,5, 8, 1]

◆列表的基本操作

1.jpg

◆列表的相关方法

3.png

◆创建列表

  >>> list((3, 5, 7, 9, 11))  #将元组转换为列表
  [3,5, 7, 9, 11]

  >>> list(range(1, 10, 2))  #将range对象转换为列表
  [1, 3,5,7, 9]

  >>> list('hello world')   # 将字符串转换为列表,每个字符转换为列中的一个元素
  ['h', 'e', 'l', 'l', '0',’, 'w",o', r l', 'd]

  >>> list({3, 7, 5})   #将集合转换为列表,集合中的元素是无序的
  [3,5, 7]

  >>> x = list()   #创建空列表
  >>> x= [1, 2, 3]
  >>> del x  #删除列表对象
  >>> x  #对象删除后无法再访问,抛出异常
  NameError: name 'x' is not defined

range函数默认有三个参数range(start,end,step)

◆利用索引访问列表

  data = list(range(10))

  print(data)
  print(data[0])     # 第一个元素的下标为
  print(data[1])     # 第二个元素的下标为1
  print(data[-1])    # -1表示最后一个元素的下标
  print(data[15])    # 15不是有效下标,代码抛出异常


  [0,1,2,3,4,5,6,7,8,9]
  0
  1
  9

  IndexError  Traceback (most recent call last)<ipython- input -8-6f56fa97754d> in <module>

      4 print(data[1])  #第二个元素的下标为1
      5 print(data[-1])  # -1表示最后一个元素的下标
----> 6 print(data[15])  # 15不是有效下标,代码抛出异常

IndexError: list index out of range

◆列表常用方法

➢append(). insert(). extend()

  lst=[1,2,3,4]
  print(lst)

  lst.append(5)
  print(lst)

  lst.insert(0, 0)
  print(lst)

  lst.insert(2,1.5)
  print(lst)

  1st.extend([6, 7])
  print(lst)


  [1,2,3,4]
  [1,2,3,4,5]
  [0,1,2,3,4,5]
  [0,1,1.5,2,3,4,5]
  [0,1,1.5,2,3,4,5,6,7] 

◆列表常用方法
➢pop(), remove()

  lst = [1,2,3,4,5,6]

  print(lst.pop())  #删除并返回最后一个元素
  print(lst)

  print(lst. pор(0))   #删除并返回下标为0的元素,后面的元素向前移动
  print(lst)

  print(lst. pop(2))   #除并返回下标为2的元素,后面的元素向前移动
  print(lst)

  lst=[1,2,3,2,4,2]
  lst .remove(2)  #删除第一个2,该方法没有返回值
  print(lst)       


  6
  [1,2,3,4,5]
  1
  [2,3,4,5]
  4
  [2,3,5]
  [1,3,2,4,2]

◆列表常用方法

➢sort()、 reverse()

 from random import sample

  #在range(10000)中任选10个不重复的随机数
  data = sample(range(10000),10)
  print(data)

  data.reverse()  #翻转,首尾交换,该方法没有返回值
  print(data)
  data.sort()  #按元素大小进行排序,该方法没有返回值
  print(data)
  data. sort(key=str)  #按所有元素转换为字符串后的大小进行排序
  print(data)


  [7506, 6063,1651, 660,2468, 8727,6301, 2448,2911,3074]
  [3074,2911, 2448, 6301, 8727, 2468,660, 1651, 6063,7506]
  [660,1651, 2448,2468,2911,3074,6063,6301,7506,8727]
  [1651, 2448,2468,2911,3074,6063,6301,660,7506, 8727]

◆列表常用方法

➢count(). index()

  lst=[1,2,2,3,3,3,4,4,4,4]

  print(lst.count(2))   # 输出2
  print(lst)

  print(lst.index(4))  # 4第一出现的索引值    输出6
  print(lst)

  print(lst.index(5))  # 代码抛出异常,提示5 is not in list


  2
  [1,2,2,3,3,3,4,4,4,4]
  6
  [1,2,2,3,3,3,4,4,4,4]

  ValueError                     Traceback (most recent call last)
  <ipython- input-6- 66d4beeb8c0d> in <module>

        4 print(lst.index(4))  # 输出6 
        5 print(lst)
  ----> 6 print(lst. index(5))  #代码抛出异常,提示5 is not in list

 ValueError: 5 is not in list  25:6  y

◆列表推导式

4.jpg

元组

◆基本概念

➢元组(tuple) 是包含多个元素的类型,元素之间用逗号分割
➢如:t1 =(123,456, "hello" )
➢可以通过把若干元素放在一 对圆括号中创建元组,如果只有一 个元素的话则需要多加一个逗号,例如(3,)。
➢也可以使用tuple()函数把列表、字典、集合、字符串以及range对象、map对象、zip
对象或其他类似对象转换为元组。
➢元组可以是空的,t2=()
➢一个元组也可以作为另一个元组的元素,此时,作为元素的元组需要增加括号,从而避
免歧义,如: t3= (123,456, ("hello","world"))

➢元组中各元素存在先后关系,可以通过索引访问元组中元素。

➢例如: t3[0]
➢元组定义后不能更改,也不能删除
➢t3[0]=78
➢与字符串类型类似,可以通过索引区来访问元组中的部分元素。
➢例如: t3[1:]
➢与字符串-样,元组之间可以用+号和*号进行运算

◆元组与列表的区别
➢元组是不可变的,不能直接修改元组中元素的值,也不能为元组增加或删除元素。因此,
元组没有提供append(、extend(和insert()等方法, 也没有remove()和pop()方法。
➢元组的访问速度比列表更快,开销更小。如果定义了一系列常量值,主要用途只是对它
们进行遍历或其他类似操作,那么一般建议使用元组而不用列表。
➢元组可以使得代码更加安全。例如,调用函数时使用元组传递参数可以防止在函数中修
改元组,而使用列表则无法保证这一点。
➢元组可用作字典的键,也可以作为集合的元素,但列表不可以,包含列表的元组也不可
以。

◆生成器表达式

gen = (2**i for i 1n range(8))   #创建生成器对象
print(gen)

print(list(gen))   #转换为列表用完生成器对象中的所有元素
#使用之后生成器中的对象为空,生成器中的元素只能使用一次,一次之后就失效
print(tuple(gen))   #转换为元组,得到空元组

gen = (2**i for i in range(8))  #重新创建生成器对象
print(next(gen))   #使用next()函数访问下一个元素
print(next(gen))
for item in gen:   #使用for循环访问剩余的所有元素
  print(item, end=' ')


<generator object <genexpr> at 0x00001FD12BFC5E8>
[1, 2, 4, 8, 16, 32, 64, 128]
()
1
2 4 8 16 32 64 128

切片操作

➢适用于列表和元组
➢切片是用来获取列表、元组、字符串等有序序列中部分元素的-种语法。在形式上,切
片使用2个冒号分隔的3个数字来完成。
➢[start🔚step]
➢其中第一-个数字start表示切片开始位置,默认为0;第二个数字end表示切片截止(但
不包含)位置(默认为列表长度) ;第三个数字step表示切片的步长(默认为1),省略步长时还可以同时省略最后一个冒号。
➢当step为负整数时,表示反向切片,这时start应该在end的右侧。

适用于列表和元组

data = list(range(20))   
print(data[:])      #获取所有元素副本
print(data[:3])     #前三个个元素
print(data[3:])     #下标3之后的所有元素
print(data[::3])    #每3个元素选取1个,步长为3
print(data[-3:])    #最后3个元素
print(data[:-5])    #除最后5个元素之外的所有元素


[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
[0,1,2]
[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
[0, 3, 6, 9, 12, 15, 18]
[17, 18, 19]
[е,1,2,3,4,5,6,7,8,9,10,11,12,13,14]
posted @ 2021-02-28 20:40  当时不杂  阅读(746)  评论(0编辑  收藏  举报