内置数据结构(变量类型)
list
set
dict
tuple
一组有序数据做成的序列
数据就有先后顺序
数据可以不只是一类数据
list的创建
直接创建,用中括号创建,内容直接用英文逗号隔开
用list创建
列表包含单个字符串的时候是一个特例
l1 = [1,4,3,2,3]
# list 内的数据可以不是一个类型
l2 = [1,2,3,"huahua","sasa","绒绒"]
print(l1) # [1, 4, 3, 2, 3]
print(l2) # [1, 2, 3, 'huahua', 'sasa', '绒绒']
# 创建列表的第二种方式
l3 = list()
print(l3) # []
print(type(l3)) # <class 'list'>
# list创建特例
# 想创建就按一个只包含一个字符串的列表
s = "huahua"
L1 = list(s)
print(type(L1)) # <class 'list'>
print(L1) # ['h', 'u', 'a', 'h', 'u', 'a']
访问
使用下标操作,也叫索引
列表的元素索引是从0开始
L1 = [13,14,23,43,233,666,4399]
print(L1[5]) # 666
print(L1[15]) # IndexError: list index out of range
# 使用下标访问
# 超标,是引起 IndexError 的原因
成员资格
# 成员资格运算
# 就是判断一个元素是否在list里面
a = [1,2,3,4,5,6]
b = 7
c = b in a
print(c) # False
d = 6
print(d in a) # True
切片操作
对列表进行任意一段的截取
截取之后,创建一个新的列表
L1 = [100,200,233,300,400,500,600,666,700,800,900]
print(L1[::1]) # 相当于print(L1[:]) # [100, 200, 233, 300, 400, 500, 600, 666, 700, 800, 900]
print(L1[::2]) # [100, 233, 400, 600, 700, 900]
# 切片可以控制增长幅度,默认增长幅度为1
print(L1[::100]) #[100]
# 下标可以超出范围,超出后不在考虑多余下标内容
print(L1[-2:-5]) # []
print(L1[-2:-5:-1]) # [800, 700, 666]
print(L1[-4:-1:1])
# 下标值,增长幅度可以为负数 # [666, 700, 800]
# 为负数,表示顺序是从右往左; 默认顺序是从左向右移动
# 规定:数组最后一个数字的下标为 -1
列表内涵:list content
通过简单方法创建列表
# for 创建
A = ['x', 'y', 'z']
# 用list创建应用 list b
# 下面代码的含义是,对于所有A中的元素,逐个放入新列表B中
B = [i for i in a]
print(B) # ['x', 'y', 'z']
# 对于C中所有元素乘以10,生成一个新的list D
C = [1,2,3,4,5,6]
D = [i*10 for i in c]
print(D) # [10, 20, 30, 40, 50, 60]
# 还可以过滤原来list中内容放入新列表
# 比如原有列表e,需要把所有c中的偶数生成新的列表F
E = [x for x in range(1,50)] # 生成一个1到49的列表
F = [m for m in e if m % 2 ==0 ]
print(F)
# 列表还可以嵌套
# 由两个列表G,H
G = [i for i in range(1,4)] # 生成list G
print(G) # [1, 2, 3]
H = [i for i in range(100,1000) if i % 100 == 0 ]
print(H) # [100, 200, 300, 400, 500, 600, 700, 800, 900]
J = [ m+n for m in G \
for n in H]
print(J) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48]
# 还可以这样写
G = [i for i in range(1,4)]
print(K)
H = [i for i in range(100,1000) if i %100 == 0 ]
print(H)
for m in G:
for n in H:
print(m+n, end = " ")
print()
#### 输出结果
#[1, 2, 3]
#[100, 200, 300, 400, 500, 600, 700, 800, 900]
#[101, 201, 301, 401, 501, 601, 701, 801, 901, 102, 202, 302, 402, 502, 602, 702, 802, 902, 103, 203, 303, 403, 503, 603, 703, 803, 903]
#[1, 2, 3]
####
关于列表的函数
# append 插入一个内容,在末尾追加
a = [ i for i in range(1,5)]
print(a) # [1, 2, 3, 4]
a.append(666)
print(a) # [1, 2, 3, 4, 666]
# insert 制定位置插入
# insert(index, data)
a.insert(3,233)
print(a) # [1, 2, 3, 233, 4, 666]
# del 删除
# pop 从对位拿出一个元素,即把最后一个元素取出来
last_ele = a.pop()
print(last_ele) # 666
print(a) # [1, 2, 3, 233, 4]
# remove 在列表中删除指定的值的元素
# 如果在被删除的值没有在list里,则报错
# 即,删除list指定值的操作一个使用 try... exceoty语句, 或者先行判断
a.insert(4,666)
print(a)
print(id(a))
a.remove(666)
print(a)
print(id(a))
### 输出结果
#[1, 2, 3, 233, 666, 4]
#2431146031176
#[1, 2, 3, 233, 4]
#2431146031176
####
#输出两个id值是一样的,说明,remove操作是在原list直接操作
# clear 清空
print(a) # [1, 2, 3, 233, 4]
print(id(a)) # 2431145323016
a.clear()
print(a) # []
print(id(a)) # 2431145323016
# 如果不需要列表地址保持不变,则清空列表可以使用以下方式
# a = list()
# a = []
# reverse 翻转列表内容,原地翻转
b = [1,2,3,4,5,6]
print(b) # [1, 2, 3, 4, 5, 6]
b.reverse()
print(b) # [6, 5, 4, 3, 2, 1]
# exend 扩展列表,两个列表,把一个直接拼接到后一个
c = [1,2,3,4]
d = [233, 666, 4399, 2144]
print(c) # [1, 2, 3, 4, 233, 666, 4399, 2144]
# count 查找列表中指定值或元素的个数
e = [1,2,3,4,5,6,7,8,9]
print(e) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
e.append(6)
e.insert(4, 6)
print(e) # [1, 2, 3, 4, 6, 5, 6, 7, 8, 9, 6]
e_len = e.count(6)
print(e_len) # 3
- tuple(元组)
可以理解成一个不允许更改的列表
# tuple的创建
# 1. 直接用小括号
ta = ()
print(type(ta)) # <class 'tuple'>
# 当用小括号创建一个元素的tuple的时候
tb = (666)
print(type(tb)) # <class 'int'>
tc = (666,)
print(type(tc)) # <class 'tuple'>
td = (666, 2333, 4399)
print(type(td)) # <class 'tuple'>
# 2.直接用逗号
ta = 666,
print(type(ta)) # <class 'tuple'>
tb = 666,2333,2019,43999
print(type(tb)) # <class 'tuple'>
# 3. 使用tuple的定义
ta = tuple()
print(type(ta)) # <class 'tuple'>
li = [1,3,5,,"花花"]
print(type(li)) # <class 'tuple'>
- tuple其余特征跟list基本一致
有序
可以访问不可以被修改
元素可以是任意类型
# tuple的索引操作
la = [ "i", "love", "huahua"]
print(la) # ['i', 'love', 'huahua']
Ta = tuple(la)
print(Ta[2]) # huahua
# tuple的分片操作
print(Ta[:]) # ('i', 'love', 'huahua')
print(Ta[:2]) # ('i', 'love')
print(Ta[-1::-1]) # ('huahua', 'love', 'i')
# tuple的相加
Ta = 233, 666, 4399,2019
Tb = (" i", "love", "money")
Tc = Ta + Tb
print(tc) # (233, 666, 4399, 2019, ' i', 'love', 'money')
# tuple乘法
Tc = Ta * 2
print(Tc) # (233, 666, 4399, 2019, 233, 666, 4399, 2019)
# tuple成员检测
if "money" in Tb:
print("是的,是我最喜欢的")
else:
print("打扰了,家贫") # 是的,是我最喜欢的
# 元组遍历
for i in Tb:
print(i) # i
# love
# money
#嵌套 tuple的访问
Td =((1,2,3,4),("i", "love", "huahua"), (8,7,6,5))
# 双层访问
for i in td: # (8, 7, 6, 5)
print(i) # 8
for j in i: # 7
print(j) # 6
# 5
# 单层访问
for k in Td:
print(k)
# (1, 2, 3, 4)
#('i', 'love', 'huahua')
#(8, 7, 6, 5)
# tuple的常用函数
Te =(123,121,231,324)
print(len(Te)) # 长度 # 4
print(max(Te)) # 最大 # 324
print(min(Te)) # 最小 #121
# tuple的特殊用法
a = 100173761
b = 'sasa是个杀手'
print(a,b) # 100173761 sasa是个杀手
a,b = b,a
print(a,b) # sasa是个杀手 100173761
# 要求对a,b值进行互换
# 这种用法 python独有
跟数学中的集合的概念一致
内容无序 + 内容不重复
# 集合的定义
# 1 通过set关键字
sa = set()
print(sa) # set()
li = [1,23,12,3423,54532,5323,12,4]
sb = set(li) # {1, 54532, 4, 5323, 12, 23, 3423}
print(sb)
# 2 使用大括号
sc = {"呆橘", "花花","须须","障障"}
print(sc) # {'呆橘', '花花', '障障', '须须'}
# in 操作
if "飒飒" in sc:
print("2333")
else:
print("不在这里啊")
# 不在这里啊
# 利用 sc生成sd
sc ={1,2,34,55,74,4}
sd = {i for i in sc}
print(sd) # {1, 2, 34, 4, 74, 55}
# 集合的内置函数
sa = {1,2,3,41,12,31,34,6,7,8}
print(len(sa)) # 10
print(sa.add(9)) # None
print(sa) # {1, 2, 3, 34, 6, 7, 8, 41, 9, 12, 31}
#len 长度
# add 向集合添加元素
# 删除操作
# remove 和 discard 的区别
sb = {1,2,3,4,5,6,7}
sb.remove(6)
print(sb) # {1, 2, 3, 4, 5, 7}
sb.discard(6)
print(sb) # {1, 2, 3, 4, 5, 7}
# 虽然输出结果相同,但remove删除的值如果不在集合中,会报错,而discard不会,看
sb.remove(8)
print(sb) # KeyError: 8
sb.discard(8)
print(sb) # {1, 2, 3, 4, 5, 7}
sb.pop()
print(sb) # {2, 3, 4, 5, 7}
# pop弹出集合的一个内容
# 删除的内容是随机的
# 集合的数学操作
# intersection:交集
sc = {1,2,3,4,5,6,7,233,1234}
sd = {6,7,8,9,10}
print(sc.intersection(sd)) # {6, 7}
# difference: 差集
print(sc.difference(sd)) # {1, 2, 3, 4, 5, 233, 1234}
# 差集的另一种表达
print(sc - sd)
# union:交集
print(sc.union(sd)) # {1, 2, 3, 4, 5, 6, 7, 8, 233, 9, 10, 1234}