Python基础笔记-列表(list)-元组(tuple)-字典(dict)-集合运算

列表 (list)

  • 列表是Python中的一个对象
  • 列表中可以保存多个有序的数据
  • 列表是可以存储对象的对象
列表的使用:
  1. 列表的创建

    • #列表存储的数据,我们称为元素
      #一个列表中可以存储多个元素,也可以在创建列表时,来指定列表中的元素
      my_1ist=[10]			#创建一个只包含一个元素的列表
      
      #当向列表中添加多个元素时,多个元素之间使用,隔开
      my_1ist=[10,20,30,40,50]			#创建了一个保护有5个元素的列表
      
      print(my_1ist)
      #列表中的对象都会按照插入的顶序存储到列表中
      #第一个插入的对象保存到第一个位置,第二个保存到第二个位置
      #我们可以通过索引(index)来获取列表中的元素
      #索引是元素在列表中的位置,列表中的每一个元素都有一个索引
      #索引是从开始的整数,列表第一个位置索引为0,第二个位置索引为1,第三个位置索引为2,以此类推
      
      #通过索引获取列表中的元素
      #语法:my_list[ 索引值 ]
      print(my_1ist[0])
      #如果使用的索引超过了最大的范围,会抛出异常
      #print(my_1ist[5])		#IndexError: list index out of range
      
      #获取列表长度: len( ) 
      print(len(my_1ist))
      
    • 切片

      #切片
      #切片指从现有列表中,获取一个子列表
      #创建一个列表,一般创建列表时,变量的名字会使用复数
      my_list=[1, 2, 3, 4, 5, 6]
      #列表的索引可以是负数
      #如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个以此类推
      print(my_list[-2])
      
      #通过切片来获取指定的元素
      # 语法:列表[起始 : 结束 : 步长]  #步长默认为 1
      #做切片操作时,返回的是一个新列表对原列表没影响
      #通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素(包前不包后)
      print(my_list[1:4])
      print('my_list[1:5:2]:',my_list[1:5:2])
      print(my_list[0:])
      
    • 序列通用操作

      #+可以将两个列表拼接为一个列表
      a = [1,2,3]+[3,5,6]
      print(a)
      #* 可以将列表重复指定的次数
      b =[1,2,3]*5
      print(b)
      
      # in和not in
      # in用来检查指定元素是否存在于列表中
      # 如果存在,返回True,否则返回False
      
      #not in用来检查指定元素是否不在列表中
      #如果不在,返回True,否则返回False
      print(2 in a)
      print(100 not in a)
      
      #len( ) 获取列表中元素个数
      
      #min() 获取列表中最小值
      #max() 获取列表中最大值
      print(min(a),max(a))
      
      #列表.index() 获取指定元素在列表中第一次出现的索引
      print(a.index(3))
      #列表.count() 统计指定元素在列表中出现的次数
      print(a.count(3))
      
  2. 操作列表中的数据

    • 列表的方法
a = [1,2,3,3,5,6]
# append()  --> 向列表的最后添加一个元素
a.append('jen')	
print(a)		#[1, 2, 3, 3, 5, 6, 'jen']

#insert(i,x) --> 向列表的指定位置插入一个元素
a.insert(6,'kang')
print(a)   		#[1, 2, 3, 3, 5, 6, 'kang', 'jen']

#extend()
#使用新的序列来扩展当前序列
#需要一个序列作为参数,它会将该序列中的元素添加到当前列表中
a.extend(['jk', 12])	
print(a)		#[1, 2, 3, 3, 5, 6, 'kang', 'jen', 'jk', 12]

#clear()
#清空列表
#a.clear()

#pop()
#根据索引删除并返回被册删除的元素
resu1t=a.pop(2)#删除索引为2的元素
print(a) 		#[1, 2, 3, 5, 6, 'kang', 'jen', 'jk', 12]
result=a.pop()  #删除最后一个
print(a) 	#[1, 2, 3, 5, 6, 'kang', 'jen', 'jk']
print('result:',result) 	#12
  • 遍历列表
a = [1,2,3,3,5,6]
'''
#通过wehile
i = 0
while i < len(a) :
	print(a[i])
	i += 1

'''
#嵌套循环
i = 0
while i < 5 :
	j = 0
	while j < i + 1 :
		print("*",end='')
		j += 1
	print()
	i += 1
'''
*
**
***
****
*****
'''

#通过for循环来 便利
#  	for 变量 in 序列 :
#			代码块
#序列中有几个元素就执行几次

for x in a :
	print(x)
	
  • range() 函数可变对象
#range(1, 2, 3) 可以用来生成一个自然数的序列
#1.起始位置(可以省略,默认是0)
#2.结束位置
#3.步长(可以省略,默认是1)
r = range(5)
r = range(0,10,2)  #[0, 2, 4, 6, 8]
#r = range(10, 0, -1)

print(list(r))

#通过range()  可以指定for循环 次数
for i in range(1,10):
	print(i)
    
'''
可变对象(list)
'''

a = [1,2,3]
print('修改前:', a, id(a))		#修改前: [1, 2, 3] 2122996012040

#通过索引修改列表
a[1] = 'tom'
print('修改后:', a, id(a))		#修改后: [1, 'tom', 3] 2122996012040

a = [1,2,3]
print('重新赋值后:', a, id(a))		#重新赋值后: [1, 2, 3] 2122996561608
a = [1,2,3]
b = a
b[0] = '100'
print('a:', a, id(a))			#a: ['100', 2, 3] 2100698789512
#两个对象指向同一个内存地址
print('b:', b, id(b))			#b: ['100', 2, 3] 2100698789512
#一般只有在为变量赋值时才是修改变量,其余的都是修改对象


  • ’==‘ ’!=‘ ‘is’ ‘is not’
# ’==‘   ’!=‘ ‘is’  ‘is not’
# ==,!=   比较对象值是否相等
#is,is not :比较的是对象的id是否相等(比较两个对象是否是同一个对象)

a = [1,2,3]
b = [1,2,3]

print(a, b)
print(id(a), id(b))
print(a == b)		#True	#a和b的值相等,使用==会返回True
print(a is b)		#False	#a和b不是同一个对象,内存地址不同,使用is会返回False

元组 tuple

  • 元组是一个不可变的序列
  • 它的操作的方式基本上和列表是一致的,所以你在操作元组时,可以把元组当成是一个不可变的列表
  • 般当我们希望数据不改变时,就使用元组,其余情况都使用列表
  1. 创建元组
#创建一个元组
my_tuple = (1,2,3)
#当元组不是空元组时,括号可以省略
#如果元组不是空元组,它里边至少要有一个,
my_tuple1 = 1,2,3,4,5
my_tuple1 = 1,
print(my_tuple1, type(my_tuple1))  		#(1,) <class 'tuple'>

#元组的解包(解构)
a,b,c = my_tuple 
print(a,b,c)		#1 2 3

#在对一个元组进行解包时,变量的数量必须和元组中的元素的数量一致
#也可以在变量前边添加一个*,这样变量将会获取元组中所有剩余的元素
# * 不能同时出现 2个 或 2个以上
a,*c = my_tuple 
#*a,c = my_tuple
print('a:',a,"c:",c) 		#a: 1 c: [2, 3]


字典(dict)

  • 产考资料: https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

  • 字典属于一种新的数据结构,称为映射(mapping)

  • 字典的作用和列表类似,都是用来存储对象的容器

  • 列表存储数据的性能很好,但是查询数据的性能的很差

  • 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素

  • 在查询元素时,字典的效率是非常快的

  • 在字典中可以保存多个对象,每个对象都会有一个唯一的名字

  • 这个唯一的名字,我们称其为键(key),通过key可以快速的查询value

    # 字典
    
    a = { } 		#创建一个空字典
    
    #创建一个保护有数据的字典
    #语法:
    #  { key:value, key:value, key:value }
    
    #字典的值可以是任意对象
    #字典的键可以是任意的 "不可变对象" -->(int、str、bool、tuple...)
    #(key) 字典的键 是不可以 重复的 ,如果出现重复后面的会替换掉前面的
    d = {'name':'kang','age':'l8','gender':'男'}
    
    print(d, type(d))
    
    #通过 键 来获取值
    print(d['name'], d['age'])
    
    #创建 字典
    #使用 dict() 来创建字典
    #
    d = dict(name='kang',age=15,)
    print(d, type(d), d['age'] )		#{'name': 'kang', 'age': 15} <class 'dict'> 15
    
    #也可以把包含双值序列的列表转换为 字典
    #双值序列,序列中只有两个值,[1,2] ('a', 3) 'ab'
    #子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列
    
    c = dict([('name',"ads"), ('a', 3)])
    print(c, type(c), c['a'])		#{'name': 'ads', 'a': 3} <class 'dict'> 3
    
    
    #len() 获取键值对的 个数
    print(len(c))		#2
    
    #in 检查字典中是否包含指定的键
    #not in 检查字典中是否不包含指定的键
    print('test'in c)		#False
    
    
    #通过 [ ] 来获取值时,如果键不存在,会抛出异常KeyError
    # get(key[, default ]) 		该方法用来根据键来获取字典中的值
    # 如果获取的键在字典中不存在,会返回None
    #print(c.get('test'))		#None
    print(c.get('test', '返回值'))		#返回值
    
    
    #修改字典
    #d[key]=value如果key存在则覆盖,不存在则添加
    c['name'] = 'aaaa'			#修改字典的key-value
    c['test'] = 'test'			#向字典中添加key-value	
    print(c)			#{'name': 'aaaa', 'a': 3, 'test': 'test'}
    
    
    #setdefault(key[,default])		可以用来向字典中添加key-value
    #	如果key已经存在于字典中,则返回key的值,不会对字典做任何操作
    #	如果key不存在,则向字典中添加这个key,并设置value
    result=d.setdefault('name','小明')
    print(result)		#kang
    result=d.setdefault('hello','小明')
    print(result)		#小明
    print(d)			#{'name': 'kang', 'age': 15, 'hello': '小明'}
    
    
    # update([other])
    # 将其他的字典中的 key-value 添加到当前字典中
    # 如果有重复的key,则后边的会替换到当前的
    t = dict(a='kang', b=12, c='kang')
    t1 = dict(a='相同键', b1=12, c2='kang')
    
    t.update(t1)
    print('t:',t)			#t: {'a': '相同键', 'b': 12, 'c': 'kang', 'b1': 12, 'c2': 'kang'}
    

    删除和遍历

    t = {'a': '相同键', 'b': 12, 'c': 'kang', 'b1': 12, 'c2': 'kang'}
    # 删除,可以更用 del( ) 来删除子典中的key-value
    # 删除不存在的 key  会报错
    del t['a']
    print(t)		#{'b': 12, 'c': 'kang', 'b1': 12, 'c2': 'kang'}
    
    # pop(key[,default])
    # 根据key删除字典中的key-value
    # 会将被删除的value返回!
    # 如果删除不存在的key,会抛出异常
    # 如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值
    r = t.pop('b')
    print(r, t)			#12  {'c': 'kang', 'b1': 12, 'c2': 'kang'}
    r = t.pop('z','返回值')
    print(r, t)			#返回值 {'c': 'kang', 'b1': 12, 'c2': 'kang'}
    
    
    #popitem()
    #	随机删除字典中的一个键值对,一般都会删除最后一个键值对
    #	删除之后,它会将删除的key-value作为返回值返回
    #返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value
    #t.popitem()
    #result=t.popitem()
    
    #### clear()  清空字典
    #t.clear()
    #print(t)			#{}
    
    
    # copy()
    # 该方法用于对字典进行浅复制
    # 复制以后的对象,和原对象是独立,修改一个不会影响另一个
    # 注意,浅复制会简单复制对象 内部的值 ,如果值也是一个可变对象,这个可变对象不会被复制
    a = {'a': 1, 'aa':{'name':'kang', 'age':12}, 'b': 2, 'c': 3}
    cp_a = a.copy()
    cp_a['aa']['age'] = 66
    
    print(a,id(a))			#{'a': 1, 'aa': {'name': 'kang', 'age': 66}, 'b': 2, 'c': 3} 3194286571256
    
    print(cp_a,id(cp_a))		#{'a': 1, 'aa': {'name': 'kang', 'age': 66}, 'b': 2, 'c': 3} 3194286579784
    
    
    
    ### 字典的遍历
    
    # keys()  该方法会返回字典的所有的key
    # 该方法会返回一个序列,序列中保存有字典的所有的键
    ss  = {'name':'kang', 'age':12, 'b': 2, 'c': 3}
    #ss = {'a': 1, 'aa':{'name':'kang', 'age':12}, 'b': 2, 'c': 3}
    #通过遍历 keys()  来获取所有key 或 value
    for k in ss.keys() :
    	print(k, ss[k])
    '''
    name kang
    age 12
    b 2
    c 3
    '''
    
    # values()
    # 该方法会返回一个序列,序列中保存有字典的值
    '''
    for k1 in ss.values() :
    	print(k1)
    '''
    
    # items()
    # 该方法会返回字典中所有的项
    # 它会返回一个序列,序列中包含有双值子序列
    # 双值分别是,字典中的key和value
    print(ss.items()) 			#dict_items([('name', 'kang'), ('age', 12), ('b', 2), ('c', 3)])
    for k3,v in ss.items() :
    	print(k3, '--', v)
    
    '''
    name -- kang
    age -- 12
    b -- 2
    c -- 3
    '''
    

集合

#创建 集合
a = {1,2,3,4,5,6,1,1,1,1,}
print(a, type(a))			#{1, 2, 3, 4, 5, 6} <class 'set'>

a = set() # 创建空集合
# 可以使用 set()  将列表和字典转换为集合 
a = set([1,2,3,4,5,6,1,1,1,1])
a1 = set({'name':'kang', 'age':12, 'b': 2, 'c': 3})
print(a, type(a))			#{1, 2, 3, 4, 5, 6} <class 'set'>
print(a1, type(a1))			#{'name', 'c', 'b', 'age'} <class 'set'>  -->字典转换为集合时 只保留 键(key)
#使用 in 和 not in 来检查集合中的元素

#使用 len() 来获取集合中元素的数量

# add()  向集合中添加元素
a.add(10)
print(a, type(a))			#{1, 2, 3, 4, 5, 6, 10} <class 'set'>

# update() 将一个集合中的元素添加到当前集合中
# update()  可以传递序列或字典作为参数,字典只会使用键
a3 = set('tom')
a.update(a3)
a.update(('a', 's', 'ss', 420))

print(a, type(a))			#{1, 2, 3, 4, 5, 6, 't', 'm', 'o', 10, 'a', 's', 'ss', 420} <class 'set'>



###删除

#pop() 随机删除一个元素
r = a.pop()
print(a, r) 	#{2, 3, 4, 5, 6, 't', 420, 10, 'm', 's', 'ss', 'a', 'o'} 1
# remove()  删除集合中指定元素
#a.remove(2)	

#clear()   清空集合
#a.clear()

#copy()  对集合进行浅复制


集合运算

#在对集合做运算时,不会影响原来的集合,而是返回一个运算结果
a = {1,2,3,4,5,6}
a1 = {3,5,7,10,2}
# & 交集运算
r = a & a1
print(r)			#{2, 3, 5}

# |  并集运算
r = a1 | a 
print(r)			#{1, 2, 3, 4, 5, 6, 7, 10}

# -  差集
r = a - a1
print(r)			#{1, 4, 6}

#  ^   异或集获取只在一个集合中出现的元素
r = a ^ a1
print(r)			#{1, 4, 6, 7, 10}

#<=   检查一个集合是否是另一个集合的子集
r = a <= a1
print(r)			#False

# < 检查一个集合是否是另一个集合的真子集
# 如果 超集b 中含有 子集a 中所有元素,并且b中还有a中没有的元素,则b就是a的真超集,a是b的真子集
# r = a < b
r = {1, 2, 3} < {1, 2, 3, 4} 
print(r)			#True

#>=, > 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值