Python中列表、元组、字典和排序(她突然地来,突然地走。我慢慢明白,人与人之间没有突然,她想好了才会来,想清了才会走。)

一、Python列表
序列是 Python 中最基本的数据结构。
序列中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。
Python 有 6 个序列的内置类型,但最常见的是列表和元组。
列表都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python 已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的 Python 数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
访问列表中的值
与字符串的索引一样,列表索引从 0 开始,第二个索引是 1,依此类推。
通过索引列表可以进行截取、组合等操作。
Python列表函数&方法
Python包含以下函数:
序号
函数
1
列表元素个数
2
返回列表元素最大值
3
返回列表元素最小值
4
将元组转换为列表
Python包含以下方法:
序号
方法
1
在列表末尾添加新的对象
2
统计某个元素在列表中出现的次数
3
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
4
从列表中找出某个值第一个匹配项的索引位置
5
将对象插入列表
6
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
7
移除列表中某个值的第一个匹配项
8
反向列表中元素
9
对原列表进行排序
10
清空列表
11
复制列表
举例说明:
演示列表的定义与使用
lst=[1,2,3,4,5,6]
print(type(lst))
print(lst[3])
lst.append(10)#增加,先来先排
lst[0:2]=7,12,13
print(lst)
lst2=[50,90,80]
lst.extend(lst2)#追加到上个列表
print(lst)
lst.insert(0,66)#添加到0的位置,原本位置的数后移,消耗资源多,尽量不用
print(lst)
print(2 in lst )
print(lst.index(6))
lst[2],lst[5]=22,55
print(lst)
lst[0:5]=77,88 #批量替换,不能是单个,不然报错
print(lst)
del lst[0]
print(lst)
lst.remove(6) #remove指定的值
print(lst)
lst.pop() #按照下标删除,不加默认最后一个删除
print(lst)
#列表常用方法
lst=["zhao","qian","sun","li","zhou","wu","zheng","wang"]
lst2=lst.copy()
print(lst2) #复制
list.reverse(lst) #倒序
print(lst)
 
嵌套列表
使用嵌套列表即在列表里创建其它列表,例如
#列表的嵌套
school_names = [['北京大学','清华大学'],
['南开大学','天津大学','天津师范大学'],
['山东大学','中国海洋大学']]
for x in range(len(school_names)):
for y in range(len(school_names[x])):
print(school_names[x][y])
#第二种写法
for x in school_names:
for y in x:
print(y)
 
列表遍历
生成随机列表
import random
 
lst=[]
for i in range(5):
lst.append(random.randint(0,100)) #返回 [0, 100] 之间的任意整数
print(lst)
 
#列表的遍历
for x in lst:#x是一个链式变量,只是lst中每个元素的复制
x+=2 #对复制的操作不能影响到元素的本身
#但如果传入的是地址或者对象本身,对其的内容的改变是会传递到外部的
#用长度遍历
for x in range(lst.__len__()):
print(lst[x]) #lstx】操作是lst中的元素的本身
 
#列表的排序
lst.sort(reverse=True) #从大到小排序
print(lst)
 
二、Python 元组
Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号 ( ),列表使用方括号 [ ]。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
#演示元组的定义与使用
tpl=(1,2,3,4,5)
print(tpl[0])
print(tpl[0:3])
print(tpl[0:5:2])
for x in tpl:
print(x)
print(len(tpl))
print(list(tpl))
print(max(tpl))
print(min(tpl))
 
三、Python字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2, key3 : value3 }
举例说明:
#演示字典的定义与使用
dct={"a","b","c","a"} #大括号没有键值对的情况,是set集合,不会重复
print(dct)
print(type(dct))
d={"name":"大黄","age":5,"strain":"拉布拉多"} #json字符串
print(d["name"])
print(d.get("bird"))#不会报错,但会告诉你为none 没有这个值
d["name"]="羊总"
print(d)
d["birthday"]="2020-12" #增加
print(d)
d.clear() #清空
del d #删除变量,元素都可以
d.setdefault("abc","") #key存在不动,key不存在加进去
print(d)
 
#演示keys()。values()。items()
dct={"name":"zhangsan","age":18,"gender":"male","id":10}
keys=dct.keys() #可以实时查看整条语句
print(keys)
dct.setdefault("birthday","2020-01")
print(keys)
for k in keys:
print(k+":",dct[k])
 
#values
values=dct.values()
dct.setdefault("now","2020-01")
print(values) #只输出值
 
#items
itms=dct.items()
print(itms)
for x,y in itms:
print(x+":",y)

 

 

 
四、排序
#冒泡排序
#双重循环,外层循环控制比较轮数
#内层循环控制每轮比较次数
for x in range(len(lst)-1): #最后一轮只上下一个元素,不需要比较,要-1
for y in range(len(lst)-x-1):#最后一次只剩下一个元素,不要比较,要-1
#每轮都能确定一个最大值,所以每轮减少一个
if lst[y]>lst[y+1]: #降序改成<
tmp=lst[y]
lst[y]=lst[y+1]
lst[y+1]=tmp
print(lst)
 
#选择排序(直接排序)
#每次从前向后遍历,找到最小值,与该位置交换
import random
 
lst=[]
for x in range(10):
lst.append(random.randint(0,100))
print(lst)
#选择排序
for x in range(len(lst)-1):#最后一个位置不需要比较
tmp=lst[x] #每轮定一个初始值,目的是为了和后面的值进行比较
idx=x
for y in range(x,len(lst)): #从初始值处向后遍历
if(tmp>lst[y]):#目的是为了在一轮中找出最小值
tmp=lst[y]#最小值保存在tmp
idx=y #小标保存在idx
else:
lst[idx]=lst[x] #根据最小值下标,把初始值放进去
lst[x]=tmp #把最小值放入初始值
print(lst)
#第二种举例说明直接排序
#在一个有序的数组中插入值并保持顺序
arr=[10,20,30,50,80]
a=int(input("请输入一个整数:"))
arr.append(a)
idx=len(arr)-1
while idx>0:
#从后向前遍历
idx-=1
#遇到比自己小的,在后方插入
if a>arr[idx]:
arr[idx+1]=a
break
#遇到比自己大的,大的值向后移
else:
arr[idx+1]=arr[idx]
#如果到最后没有插入,直接插入首位
if idx==0:
arr[0]=a
print(arr)
 
#插入排序
#刚开始一个元素,即为有序
#每次加入一个元素,形成新的序列,应用插入元素的逻辑,,使其继续有序
import random
 
lst=[]
for x in range(10):
lst.append(random.randint(0,100))
print(lst)
 
for x in range(1,len(lst)):
idx=x
tmp=lst[x]
while x>0:
x-=1
if tmp>=lst[x]:
lst[x+1]=tmp
break
else:
lst[x+1]=lst[x]
if x==0:
lst[0]=tmp
print(lst)
 
总结:
#列表的赋值
list. append (元素)#在列表尾部追加元素
list [index]=元素 #把对 应下标的值改为元素
list[index]=元素1,元素2 #默认变为元组插入该位置
list [index1, index2]=元素1,元素2 # 会按位插入
list [index1, index2]=元素1,元素2,元素3... #会替换插入
list [index1, index2]=元素1 #值比位置少的话,不能插入,会报错
 
#列表的遍历
typel :
for x in lst: #x是lst中每个元素的复制
print (x)
type2 :
for x in range (len (lst) ) : #lst[x]是lst中每个元素本身
print(lst[x] )


posted @ 2022-01-17 22:59  十一没有撤退可言!  阅读(173)  评论(0编辑  收藏  举报