Python3基本数据类型之列表,,1、初识列表列表(L
Python3基本数据类型之列表,,1、初识列表列表(L
1、初识列表
列表(List)是Python3中的"容器型"数据类型。
列表通过中括号把一堆数据括起来的方式形成,列表的长度不限。
列表里面的元素可以是不同的数据类型,但是一般是相同的数据类型。
nums = [1,3,5,7,9,11,13,15]user_info = ["jack", 18, "male"]
==列表支持索引(index)和切片(silice)的方式访问其中的元素==。
#demo1:索引nums = [1,3,5,7,9,11,13,15]print(nums[1],[-1])#output:3 15列表索引值从0开始,即[0]对应列表的第一个元素,同理依次往右计数为简单访问列表的末尾元素,索引值可以为负数,[-1]表示列表最后一个元素,[-2]倒数第二个元素
#demo2:切片nums = [1,3,5,7,9,11,13,15]print(nums[0:3])print(nums[2:-1])print(nums[:])print(nums[::2])print(nums[-5:-1])print(nums[-1:-5:-1]) # 注意切出来的元素顺序#output:[1, 3, 5][5, 7, 9, 11, 13][1, 3, 5, 7, 9, 11, 13, 15][1, 5, 9, 13][7, 9, 11, 13][15, 13, 11, 9]
==切片总结==:
列表切片的返回结果是一个列表,即把切出来的元素放在一个新列表中。切片操作的方法按照 list_name[start : end : step] 的通原则执行:start是切片的开始位置,此位置元素包含在切出来的列表中。end是切片的结束位置,结束位置的元素不包含在切出来的列表中。step是切片的间隔,即每个step切一个元素出来。默认step是1。[ : ] 冒号两边什么也不写,默认切整个列表的元素。step也可以是负数,即倒着切,此时end处的元素依然不包含的新列表中。==类列表可以连接在一起==。
#demo3:nums = [1,3,5,7,9]new_nums = nums + [2,4,6,8,10]print(new_nums)#output:[1,3,5,7,9,2,4,6,8,10]
==列表是可变的,可以修改列表中元素的值==。
#demo4:索引nums = [1,2,3,4,5]nums[2] = 6print(nums)#output:[1,2,6,4,5]
#demo5:切片words = ["a", "b", "c", "d", "e"]words[1:4] = ["B", "C", "D"]print(words)#output:["a", "B", "C", "D", "e"]
==列表尾部增加元素、删除列表元素、清空列表==
#demo6:names = ['cindy', 'jack', 'alex', '小明']names.append("jane")names[1:3] = []print(names)names[:] = []print(names)#output:['cindy', '小明', 'jane'][]
==len()获得列表长度==
#demo7:names = ["cindy", "jack", "white"]print(len(names))#output:3
==max()、min()、sum()==:获得列表最大值、最小值、元素之和
#demo8:nums = [1,2,3,4,9]print(max(nums), min(nums), sum(nums))# output:9 1 19
==list()==:将其他数据类型(可迭代数据类型)转化为列表形式
#demo9:str1 = "string"t = (1,2,3)s = {1,2,3}d = {"name":"jack","age":18}print(list(str1)) #output:['s', 't', 'r', 'i', 'n', 'g']print(list(t)) #output:[1, 2, 3]print(list(s)) #output:[1, 2, 3]print(list(d)) #output:['name', 'age']
==列表嵌套==:列表可以多重嵌套
#demo10:nums = [1,2,[3,4,5], [6,7,[0],8],3,4]
2、列表属性方法
Python中,一切皆对象,列表也不例外。
作为==List Objects==,列表对象也有很多方法属性,通过点的方式调用。
append() insert() extend() # 增pop() remove() clear() # 删index() count() copy() # 查、复制sort() reverse() # 排序
==append(x)==
在列表的尾部添加一个新元素x,相当于:list_name[len(list_name):] = [x]
元素x可以是任意数据类型,因为列表是可以嵌套的,其他方法中的x同理。
#demo1:nums = [1,3,5]nums.append(7)print(nums) #output: [1,3,5,7]
==insert(index, x)==
在列表索引index位置前插入一个新元素x,原列表index处及后面的元素一次往后排。
#demo2:nums = [1,3,5]nums.insert(1,10)nums.insert(-1,10)print(nums) #output: [1,10,3,10,5]
==extend(iterable)==
从一个可迭代对象中增加新元素到列表中,extend每次调用仅接收一个参数。
可迭代的对象包含:列表、元组、字典、集合等
#demo3:nums = [1,2,3]nums.extend([4,5,6])info = {"name":"jack","age":18}nums.extend(info)# nums.extend(10) 报错TypeError: 'int' object is not iterableprint(nums)#output:[1,2,3,4,5,6,"name","jack"]
==pop( [index] )==
默认不传参数,删除列表最后一个元素并返回。
pop也可以通过指定下标索引删除特定位置元素并返回,索引值越界会报错。
注意空列表调用pop会报错:IndexError: pop from empty list
#demo4:nums = [1,2,3,4,5]print(nums.pop())res = nums.pop(1)print(nums, res)lis = []# lis.pop() #报错#output:5[1,3,4] 2
==remove(x)==
删除列表中第一个出现的元素 x,x不存在就报错。
#demo5:nums = [1,2,3,2]nums.remove(2)print(nums) #output:[1,3,2]
==clear()==
删除列表中的所有元素,相当于 del nums[:]
#demo6:nums = [1,2,3]nums.clear()print(nums) #output:[]
==index(x[, start[, end])==
返回列表中元素x第一次出现位置处的索引值,如果x不存在就报错。
可选参数start和end,通过下标的方式限定查找的范围:start<= 范围 <end,
start和end可独立使用也可同时使用。
start位置处的元素在查找的范围内,end位置处的元素不在查找的范围内。#demo7:nums = [1,2,3,4,1,2,10]print(nums.index(2),nums.index(2,1),nums.index(2,2,6))# print(nums.index(2,2,5)) #报错,因为元素不存在,不在查找的范围内#output:1 1 5
==count(x)==
返回元素x在列表中一共出现的次数,如果列表中不存在x,返回0
#demo8:nums = [1,2,1,2,5,6,1,2]print(nums.count(1),nums.count(8))#output:3 0
==copy()==
Return a shallow copy of the list. Equivalent to nums[:]
Python3中copy涉及的内容较多,现简单介绍之,后续再深入学习。
#demo9:nums = [1,2,3]new_nums = nums.copy()print(new_nums)#output: [1,2,3]
==sort(key=None, reverse=False)==
sort不返回任何参数,只对列表做排序处理。key和reverse是可选参数。
默认sort对列表中元素做升序排列,即reverse=False,若指定reverse=True,对列表元素做降序排列。
默认sorts使用元素中的第一个元素做排序的比较对象,也可以使用key参数指定比较的对象,见demo12
#demo10:nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]nums.sort()print(nums)#output: [(1, 6), (3, 2), (4, 5), (5, 8), (6, 9)]#即 按元组的第一个元素升序排列,默认reverse=False
#demo11:nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]nums.sort(reverse=True)print(nums)#output: [(6, 9), (5, 8), (4, 5), (3, 2), (1, 6)]#即 按元组的第一个元素降序排列啦,激活reversr=True,降序啦
#demo11:def sort_second_item(ele): return ele[1]nums = [(3,2),(6,9), (5,8),(4,5),(1,6)]nums.sort(key=sort_second_item, reverse=True)print(nums)#output: [(6, 9), (5, 8), (1, 6), (4, 5), (3, 2)]#即 按元组的第二个元素降序排列啦,激活key,使用自定义排序对象
==reverse()==
列表反转,仅反转列表无排序功能
nums = [1,3,2,6,9,4,3]nums.reverse()print(nums)#output: [3, 4, 9, 6, 2, 3, 1]
总结:append、reverse、sort、remove等仅修改列表,无返回值,但默认是返回None
3、列表高级用法
==1、像栈(Stacks)一样使用列表==
“后进-先出(last-in, first-out)”append()和pop()#demo1:nums = [1,2,3,4]nums.append(5)nums.append(6)n1 = nums.pop()n2 = nums.pop()print(n1, n2)#output: 6 5
==2、列表解析==
列表解析是用来生成列表的,这种列表内的元素具有某种内在规律。
#demo2:nums = [x*2 for x in range(10)]print(nums)#output: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
具体用法是:[表达式 for语句 if语句]
表达式如果是元组,则必须用小括号括起来;字典则大括号可以有多个for 语句和 多个if 语句#demo3:nums = [-2, 0, 4]print([x for x in nums if x>=0])print([abs(x) for x in nums])print([{x:x*2} for x in nums])print([(x,y) for x in nums for y in nums if x>y if x>0])#output:[0, 4][2, 0, 4][{-2: -4}, {0: 0}, {4: 8}][(4, -2), (4, 0)]
==3、矩阵转置==
把下面3x4矩阵转置
matrix = [ [1, 2, 3, 4],... [5, 6, 7, 8],... [9, 10, 11, 12],]
#demo4:tran_matrix = [ [row[i] for row in martix] for i in range(4) ]print(tran_matrix)#output: [[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
解读:先看 for i in range(4) 指的是四次循环生成新矩阵的4行再看,当i=0时:内层循环 for row in matrix 这个循环有三次,因为len(matrix)=3,即代表新矩阵矩阵每行的三个数 当row=matrix[0],即row=[1,2,3,4],这是row[i]即row[0]=1当row=matrix[1],即row=[5,6,7,8],这是row[i]即row[0]=5当row=matrix[2],即row=[9,10,11,12],这是row[i]即row[0]=9 得到[1,5,9],内层循环结束,外层循环接着开始,i=1当row=matrix[0],即row=[1,2,3,4],这是row[1]即row[0]=2当row=matrix[1],即row=[5,6,7,8],这是row[1]即row[0]=6当row=matrix[2],即row=[9,10,11,12],这是row[1]即row[0]=10 得到[2,6,10],依次类推......
Python3基本数据类型之列表
相关内容
- 怎么用python做网站?,,python做网站方
- 【Python3爬虫】Scrapy使用IP代理池和随机User-Agent,,在使
- python操作excel (openpyxl),,最近看到好几次群里有
- os.environ模块,,os.environ
- python+win32--com实现excel自动化,,import win
- python3 面向对象之封装,,封装是是面向的特点之
- python中@property的使用,,在绑定属性时,如果我
- python之数据类型和变量,,数据类型计算机顾名思
- mnist的格式说明,以及在python3.x和python 2.x读取mnist数据
- Python中List的排序问题,,今天在知乎上看到一个
评论关闭