Python数据结构之列表与元组详解

目录
  • Python 列表(list):
    • 1.序列介绍:
    • 2.列表的概述:
    • 3.创建一个列表
    • 4.列表的索引
    • 5.列表的分片
    • 6.列表的分片赋值
    • 7.循环遍历列表
    • 8.查找元素与计数
    • 9.列表增加元素:
    • 10.列表删除元素:
    • 11.列表排序
  • Python 元组(tuple):
    • 1.为什么要将元组设计成为不可变序列
    • 2.创建元组
    • 3.元组的遍历
    • 4.元组的内置函数

Python 列表(list):

1.序列介绍:

  序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

Python有6个序列的内置类型,但最常见的是列表和元组。

序列都可以进行的操作包括索引,切片,加,乘,检查成员。

此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

Python:可变序列和不可变序列

​可变序列:列表、集合、字典可以进行增删改操作,序列地址页不会发生变化

​不可变序列:元组、字符串 没有增删改操作

#可变序列:列表、字典、集合
list_1 = [10,20,30]
print(id(list_1))   #list_1的地址为:2927159489792
list_1.append(40)
print(id(list_1))   #list_1的地址为:2927159489792 改变了值,列表地址并没有改变

#不可变序列:字符串、元组
str_1 = "HelloWorld"
print(id(str_1))    #str_1的地址为:2244899454896
str_1 = str_1+"1"
print(id(str_1))    #str_1的地址为:2244900762928  改变了值,字符串地址也发生了变化

2.列表的概述:

列表是包含0个或者多个元素的有序序列,属于序列类型。

特点:

a.列表的长度和内容是可变的(可以自由的对列表中的元素进行,增加、删除或者替换)

b.列表没有长度限制

c.列表中的元素类型可以不同(可以是基本数据类型,也可以是列表、元组、字典、集合以及其他自定义类型的对象)

3.创建一个列表

只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

#创建列表方式一
list_0 = []  #空列表
list_1 = ['elephan','monkey','tiger']
list_2 = [1,2,3]
list_3 = [1,2.2,'tiger',True,list_1]   #列表可存储不同的数据类型

#创建列表方式二:使用list()内置函数  list(obj)函数将字符串、range()对象、元组等对象转换为列表。
list_4 = list("python")
list_5 = list([1,2,3,4,5])
list_6 = list((1,2,3))
list_7 = list(range(1,5,2))

4.列表的索引

#列表的索引
list_1 = [1,2.2,'tiger',True]
print(list_1[0])
print(list_1[3])
#print(list_1[4])  报错,超出列表的长度

5.列表的分片

#列表的分片
list_1 = [1,2.2,'tiger',True]
print(list_1[1:3])
print(list_1[0:3:2])
print(list_1[-1:0:-1])    #反向分片的时候,注意步长要为负数

6.列表的分片赋值

x = [1,2,3,4]
x[1] = 1    #替换下角标为1的索引
print(x)
x[2:] = 5,6 #从下角标为2的索引开始替换
print(x)
x[1:1] = [1,2,3,4,5,6,7]    #在变量索引为1的位置插入 “1,2,3,4,5,6,7”
print(x)

#运行结果
[1, 1, 3, 4]
[1, 1, 5, 6]
[1, 1, 2, 3, 4, 5, 6, 7, 1, 5, 6]

7.循环遍历列表

为了能有效地逐一输出列表中的数据,可以使用while和for循环来便利输出列表。

while循环遍历列表:

x = [1,2,3,4,5,6,7,8,9]
length = len(x)
i = 0
while i<length:
    print(x[i])
    i+=1

for循环遍历列表:

x = [1,2,3,4,5,6,7,8,9]
for n in x:
    print(n)

8.查找元素与计数

  index(obj)方法:用于返回指定元素在列表中首次出现的位置,如果该元素不在列表中则抛出异常。

animal = ['elephant','monkey','snake','tiger',(1,2,3)]
print(animal.index((1,2,3))
print(animal.index("snake"))
#print(animal.index("喵喵"))   #找不到喵喵会抛出异常
x = input("请输入您要查找的动物")
if x in animal:
    a = animal.index(x) #返回索引值
    print('元素{0}在列表中的索引为:{1}'.format(x,a))
else:
    print("列表中不存在该元素")

count(obj)方法:统计指定元素在列表中出现的次数

x = [1,2,2,2,3,4,[1,2,3,4],(1,2),(1,2)]
a = x.count(2)
print(a)
b = x.count((1,2))
print(b)

#运行结果
3
2

9.列表增加元素:

append(obj)方法extend(seq)方法insert(index,obj)方法

append(obj):在列表的末尾添加新的元素、对象

add_list = [0,1,2,3,4]
add_list.append(5)  #在末尾添加一个元素5
print(add_list)
add_list.append([6,7])  #在末尾添加一个列表对象[6,7]
print(add_list)
x = [8,9]
add_list.append(x)  #在末尾添加一个列表对象x
print(add_list)

#运行结果
[0, 1, 2, 3, 4, 5]
[0, 1, 2, 3, 4, 5, [6, 7]]
[0, 1, 2, 3, 4, 5, [6, 7], [8, 9]]

  extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表拓展原来的列表)

list_1 = [1,2,3]
list_2 = [4,5,6]
list_1.extend("python") #将序列python与list_1合并
print(list_1)
list_1.extend(list_2) #将list_2看作一个序列,将这个序列和list_1合并
print(list_1)

insert(index,obj):可以将指定的对象添加到指定位置

#insert()方法
number = [1,2,4,5]
number.insert(2,3)  #在索引为2的位置添加元素3
print(number)
number.insert(5,[6,7])  #在索引为5的位置添加对象[6,7]
print(number)
x = [8,9]
number.insert(6,x)  #在索引为6的位置添加对象x
print(number)

#运行结果
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, [6, 7]]
[1, 2, 3, 4, 5, [6, 7], [8, 9]]

10.列表删除元素:

del命令pop()方法remove()方法

del命令:根据索引删除列表中的元素(删除一个或者多个)

number = [1,2,3,4,5,6,7,8,9]
del number[2]   #删除索引为2的元素
print(number)
del number[1:3] #分片删除索引1:3的元素
print(number)
del number[-1:0:-2] #分片删除索引-1:0:-2的元素
print(number)

  pop([obj])方法:用于移除列表中的一个元素(默认最后一个),并且返回该元素的值 (删除一个)

number = [1,2,3,4,5,6,7,8,9]
print(number.pop())  #默认删除最后一个元素,并返回该元素的值
print(number)
print(number.pop(0) )  #删除索引为0的元素
print(number)

remove(obj)方法:移除列表中某个值的第一个匹配项。

#使用remove方法删除列表x中的所有'abc'
x = ["123",'abc',"ABC",'python','abc']
while 'abc' in x:
    x.remove('abc')
print(x)

#运行结果
['123', 'ABC', 'python']

11.列表排序

reverse()方法:用于将列表中的元素反向存放(修改原列表值)。

x = [1,2,3,4]
x.reverse()
print(x)

#运行结果
[4, 3, 2, 1]  

sort([key = None],[reverse = False])方法:用于对原列表进行排序(默认为升序排序),排序后的新列表会覆盖原列表

  key:传递给key参数的是一个函数,它指定可迭代对象中的每一个元素来按照该函数进行排序

reverse: 表示是否反向排序,默认为False

# 这里先看一个不带key参数的sort()函数,大家很容易知道结果
li = [[1, 7], [1, 5], [2, 4], [1, 1]]
li.sort()
print(li)
# [[1, 1], [1, 5], [1, 7], [2, 4]] 默认按照0维排序 再按照1维排序

def fun(li):
    return li[1]
# 这时将函数fun传递给参数key 得出结果
li.sort(key=fun)
print(li) # [[1, 1], [2, 4], [1, 5], [1, 7]]
#是li中每个子元素的第二个数进行排序
#无参数排序
x = [1,2,3,4,5]
x.sort()
print(x)
#指定参数排序,长度,反向
x_1 = ['a','abc','abcd','ab']
x_1.sort(key=len,reverse=True)
print(x_1)

#运行结果
[1, 2, 3, 4, 5]
['abcd', 'abc', 'ab', 'a']

  sorted(iterable,[key = None],[reverse = False]) 函数:排序方式与sort一样,但是sorted函数会返回一个新列表,对原列表不进行修改

iterable:表示可迭代对象,在这里就是列表名。

#无参数排序
x_1 = [1,5,2,3,4]
x_2 = sorted(x_1)
print(x_1)
print(x_2)

#指定参数排序
x_1 = ['a','abc','abcd','ab']
x_2 = sorted(x_1,key=len,reverse=True)
print(x_1)
print(x_2)

#运行结果
[1, 5, 2, 3, 4]
[1, 2, 3, 4, 5]
['a', 'abc', 'abcd', 'ab']
['abcd', 'abc', 'ab', 'a']

Python 元组(tuple):

元组是不可变序列,所以增删改操作不能使用。

1.为什么要将元组设计成为不可变序列

  • 在多任务环境下,同时操作对象不需要加锁
  • 在程序中尽量使用不可变序列

注意:元组中存储的是对象的引用

  • 如果元组中存储的对象本身为不可变对象,则不能引用其他对象
  • 如果元组中存储的对象本身为可变对象,则可变对象的引用不可改变,但是数据可以

tuple_1 = (10,[20,30],"string")
print("1",tuple_1[0],type(tuple_1[0]),id(tuple_1[0]))
print("2",tuple_1[1],type(tuple_1[1]),id(tuple_1[1]))
print("3",tuple_1[2],type(tuple_1[2]),id(tuple_1[2]))
#tuple_1[0] = 1
#tuple_1[1] = 1       这三行代码报错,不能修改元组的值
#tuple_1[2] = 1
tuple_1[1].insert(2,40)  #使用list的方法修改list的值,但是列表的引用地址并没有改变
print("4",tuple_1[1],type(tuple_1[1]),id(tuple_1[1]))

#运行结果
1 10 <class 'int'> 2698032015952
2 [20, 30] <class 'list'> 2698040063232
3 string <class 'str'> 2698040230832
4 [20, 30, 40] <class 'list'> 2698040063232

2.创建元组

#方式一:直接使用()创建
tuple_1 = (1,2.2,"Python",True)
print(tuple_1)          #运行结果(1, 2.2, 'Python', True)
#()可以省略不写
tuple_1 = 1,2.22,"Python",True
print(tuple_1)          #运行结果(1, 2.22, 'Python', True)

#方式二:使用内置函数tuple(obj)函数将字符串、range()对象、元组等对象转换为元组
tuple_2 = tuple("python")
tuple_3 = tuple([1,2,3,4,5])
tuple_4 = tuple((1,2,3))
tuple_5 = tuple(range(1,5,2))
tuple_6 = tuple({"a":"张三",True:1})
print(tuple_2)      #运行结果('p', 'y', 't', 'h', 'o', 'n')
print(tuple_3)      #运行结果(1, 2, 3, 4, 5)
print(tuple_4)      #运行结果(1, 2, 3)
print(tuple_5)      #运行结果(1, 3)
print(tuple_6)      #运行结果('a', True)

#注意:当元组的值,只包含一个元素的时候,一定要加入一个逗号
tuple_7 = (1,)
tuple_8 = (1)
tuple_9 = ("你",)
tuple_10 = ("你")
print(tuple_7)      #运行结果(1,)
print(tuple_8)      #运行结果1
print(tuple_9)      #运行结果('你',)
print(tuple_10)     #运行结果你

3.元组的遍历

tuple_1 = ('python','world',94)
#方法一:使用循环利用索引,获取全部元组的元素
i = 0
length = len(tuple_1)
while i<length:
    print(tuple_1[i])
    i += 1
#方法二
for x in tuple_1:
    print(x)

4.元组的内置函数

  • 序列都会具备的三个函数: len() max() min()
  • tuple():功能:以一个序列为参数,并把它转换为元组,如果参数本身是元组,则原样返回该参数(参考上文元组的知识点2,创建元组)

到此这篇关于Python数据结构之列表与元组详解的文章就介绍到这了,更多相关Python 列表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-10-12

Python的 元组(Tuple)详解

目录 Python3的 元组(Tuple) 元组运算符 元组索引,截取 元组内置函数 总结 Python3的 元组(Tuple) Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号 ( ),列表使用方括号 [ ]. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 元组中只包含一个元素时,需要在元素后面添加逗号 , ,否则括号会被当作运算符使用: 元组与字符串类似,下标索引从 0 开始,可以进行截取,组合等. 可以对元组进行连接组合,但是不能修改,删除.

python列表推导式 经典代码

目录 一.什么是推导式 二.条件推导式 1.语法 2.实战练习 三.列表推导式 1.语法 2.实战练习 3.效率对比 四.重点总结 在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个迭代器快速简洁地创建数据类型的一种方法,它将循环和条件判断结合,从而避免语法冗长的代码,提高代码运行效率.能熟练使用推导式也可以间接说明你已经超越了python初学者的水平. 二.条件推导式 1.语法 ''' value1:如

一篇文章带你了解python元组基础

目录 1. 元组基本知识 1.元组的基本格式和用法 2. 元组操作实例 1.建立元组 2.查找元素:通过元组下标实现. 3.删除元组:对元组的删除时不允许的,可以通过del函数,实现对整个元组对象的删除. 4.统计元素 5.合并元组 6.转换元组 总结 1. 元组基本知识 元组:是不可变的序列,也是一种可以存储各种数据类型的集合,用小括号(())表示与那组的开始和结束,元素之间用半角逗号(,)分隔.不可变指不能对元组对象进行增加元素.变换元素位置.修改元素.删除元素操作.元组中每个元素提供对应的

python:列表详解

目录 列表list 1.列表创建 2.列表访问 1)一维列表的访问 2)二维列表的访问 3.修改元素 4.列表切片 5.del命令 6.列表运算 1)列表相加 2)列表相乘 7.列表方法 1) index(value[,start=0[,stop]]) 2) count() 3)append() 4)extend() 5)insert() 总结 列表list 1.列表创建 list1 = [3.14, 1.61, 0, -9, 6] list2 = ['train', 'bus', 'car',

Python 列表排序详解

在Python中,对列表进行排序有两种方法. 一种是调用 sort() 方法,该方法没有返回值,对列表本身进行升序排序. cars = ['bmw', 'audi', 'toyota', 'subaru'] cars.sort() print(cars) 输出: ['audi', 'bmw', 'subaru', 'toyota'] 另一种方法是使用 sorted() 函数,该函数会返回升序排序的列表,同时不影响原本的列表. cars = ['bmw', 'audi', 'toyota', 's

Python中元组的基础介绍及常用操作总结

目录 1.元组的介绍 2.访问元组 3.修改元组(不可以修改的) 4.元组的内置函数有count,index 5.类型转换 1.将元组转换为列表 2.将元组转换为集合 1.元组的介绍 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 元组的格式: tup=('a','b','c','d') 2.访问元组 元组可以使用下标索引来访问元组中的值,下标索引从0开始 例如: tup=('a','

Python中元组,列表,字典的区别

Python中,有3种内建的数据结构:列表.元组和字典. 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目.列表中的项目.列表中的项目应该包括在方括号中,这样python就知道你是在指明一个列表.一旦你创建了一个列表,你就可以添加,删除,或者是搜索列表中的项目.由于你可以增加或删除项目,我们说列表是可变的数据类型,即这种类型是可以被改变的,并且列表是可以嵌套的. 实例: #coding=utf-8 animalslist=['fox','tiger','ra

对于Python中RawString的理解介绍

总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2.r 代表的意思是: raw 3.r 只对其内的反斜杠起作用(注意单个 \ 的问题) raw string 有什么用处呢? raw string 就是会自动将反斜杠转义. >>> print('\n') >>> print(r'\n') \n >>> (注:出现了两个空行是因为 print() 会自

Python 中pandas.read_excel详细介绍

Python 中pandas.read_excel详细介绍 #coding:utf-8 import pandas as pd import numpy as np filefullpath = r"/home/geeklee/temp/all_gov_file/pol_gov_mon/downloads/1.xls" #filefullpath = r"/home/geeklee/temp/all_gov_file/pol_gov_mon/downloads/26368f3

基于Python中的yield表达式介绍

python生成器 python中生成器是迭代器的一种,使用yield返回函数值.每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生成器. 这里可以参考Python函数式编程指南:对生成器全面讲解 注意到yield是个表达式而不仅仅是个语句,所以可以使用x = yield r 这样的语法. 这个知识点在协程中需要使用.协程的概念指的是在一个线程内,一个程序中断去执行另一个程序,有点类似于CPU中断.这样减少了切换线程带来的负担,同时不需要多线程中的锁机制,因为不存在

python中元组的用法整理

元组:tuple 内部只有两个可以操作的函数[count()/index()],一个是查看一个数据在元组中出现的总数另一个是查看. 一个数据在元组中的位置,外部有一个默认的函数sorted可以针对元组进行排序,排序注意:使用系统默认排序,但是必须保证排序的数据他们的数据类型是一致的!与元组查询相关函数,可以直接操作,如:len()查看元组中元素的个数. 声明元组方式 Name = tuple() name = ("1","2","3") name

java基础之数组常用操作总结(必看篇)

常用的对数组进行的操作 1.求数组中最大值,最小值 思路:假设下标为0的元素是最大值,遍历数组,依次跟max进行比较,如果有元素比这个max还大,则把这个值赋给max.最小值同样 public class TestArray{ public static void main(String[] args){ int[] arr={23,45,234,576,34,87,34,12,67}; int max=arr[0]; int min=arr[0]; for(int i=0;i<arr.leng

Python xlrd/xlwt 创建excel文件及常用操作

一.创建excel代码 备注:封装好了(可直接调用) """ -*- coding:utf-8 -*- @Time :2020/8/20 21:02 @Author :Jarvis @File :jar_excel_util.py @Version:1.0 """ from typing import List import xlwt class JarExcelUtil: def __init__(self, header_list: List

Python中一些不为人知的基础技巧总结

前言 本文主要给大家总结介绍了关于Python的一些基础技巧,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.startswith()和endswith()参数可以是元组 当检测字符串开头或结尾时,如果有多个检测值,可以用元组作为startswith()和endswith()参数: # bad if image.endswith('.jpg') or image.endswith('.png') or image.endswith('.gif'): pass # good

Python 中的lambda函数介绍

Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction). 一.lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x): return x**2 print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2 print g(4) 二.la

python中property属性的介绍及其应用详解

Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回. 使用property修饰的实例方法被调用时,可以把它当做实例属性一样 property的用法1--装饰器方式 在类的实例方法上应用@property装饰器 class Test: def __init__(self): self.__num = 100 @property def num(self): print("--get--") return self.__num @n