python基础2-列表、元组、字符串、字典、集合

1、列表和元组操作

定义列表

names = ['Severen',"Peter",'Bob']

通过下标访问列表中的元素,下标从0开始计数

>>> names[0]
'Severen'
>>> names[2]
'Bob'
>>> names[-1]
'Bob'
>>> names[-2] #还可以倒着取
'Peter'

切片:取多个元素

>>> names = ["Severen","Peter","Bob","John","Tom","Cat"]
>>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
['Peter', 'Bob', 'John']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Peter', 'Bob', 'John', 'Tom']
>>> names[0:3]
['Severen', 'Peter', 'Bob']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Severen', 'Peter', 'Bob']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['John', 'Tom', 'Cat']
>>> names[3:-1] #这样-1就不会被包含了
['John', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Severen', 'Bob', 'Tom']
>>> names[::2] #和上句效果一样
['Severen', 'Bob', 'Tom']

追加

>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat']
>>> names.append("IamNew")
>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']

插入

>>> names
['Severen', 'Peter', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.insert(2, '强行从Bob前面插入')
>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', 'John', 'Tom', 'Cat', 'IamNew']

>>> names.insert(4, '强行从Bob后面插入')
>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', '强行从Bob后面插入', 'John', 'T
om', 'Cat', 'IamNew']

修改

>>> names
['Severen', 'Peter', '强行从Bob前面插入', 'Bob', '强行从Bob后面插入', 'John', 'T
om', 'Cat', 'IamNew']
>>> names[2] = '该换人了'
>>> names
['Severen', 'Peter', '该换人了', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat
', 'IamNew']

删除

>>> names
['Severen', 'Peter', '该换人了', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat
', 'IamNew']
>>> del names[2]
>>> names
['Severen', 'Peter', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 'IamNew']

>>> names.remove("Peter") #删除指定元素
>>> names
['Severen', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 'IamNew']
>>> names.pop() #删除列表最后一个值,返回被删除的值
'IamNew'
>>> names
['Severen', 'Bob', '强行从Bob后面插入', 'John', 'Tom', 'Cat']
>>> names.pop(1) #删除列表中指定索引的值,返回被删除的值
'Bob'
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat']

扩展

>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3]

获取下标

>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3]
>>> names.index('Tom')
3 #只返回找到的第一个下标

统计

>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.count('Tom')
2

排序&反转

>>> names
['Severen', '强行从Bob后面插入', 'John', 'Tom', 'Cat', 1, 2, 3, 'Tom']
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str' #3.0里不同数据类型不能放在一起排序了
>>> names[-4] = '1'
>>> names[-3] = '2'
>>> names[-2] = '3'
>>> names
['Cat', 'John', 'Severen', 'Tom', '强行从Bob后面插入', '1', '2', '3', 'Tom']
>>> names.sort()
>>> names
['1', '2', '3', 'Cat', 'John', 'Severen', 'Tom', 'Tom', '强行从Bob后面插入']
>>> names.reverse() #反转
>>> names
['强行从Bob后面插入', 'Tom', 'Tom', 'Severen', 'John', 'Cat', '3', '2', '1']

复制

#浅copy的三种实现方式:
n1 = copy.copy(names)
n2 = names[:]
n3 = list(names)

#浅copy的应用场景:一对夫妻有一个公共的银行账号(第2周第9章8分钟)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

语法

names = ("severen","jack","tom")

它只有2个方法,一个是count,一个是index。

2、字符串操作

name = "severen"
name.capitalize()  首字母大写
name.casefold()   大写全部变小写
name.center(50,"-")  输出 '---------------------severen----------------------'
name.count('ve') 统计ve出现次数
name.encode()  将字符串编码成bytes格式
name.endswith("en")  判断字符串是否以en结尾
 "seve\tren".expandtabs(10) 输出'seve      ren', 将\t转换成多长的空格 
 name.find('A')  查找A,找到返回其索引, 找不到返回-1

format :
    >>> msg = "my name is {}, and age is {}"
    >>> msg.format("severen",22)
    'my name is severen, and age is 22'
    >>> msg = "my name is {1}, and age is {0}"
    >>> msg.format("severen",22)
    'my name is 22, and age is severen'
    >>> msg = "my name is {name}, and age is {age}"
    >>> msg.format(age=22,name="severen")
    'my name is severen, and age is 22'
format_map
    >>> msg.format_map({'name':'severen','age':22})
    'my name is severen, and age is 22'

msg.index('a')  返回a所在字符串的索引
'9aA'.isalnum()   True,包含所有的英文字母和数字
name.isalpha()   True,纯英文字母组成
'9'.isdigit() 是否整数
b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
str.islower() 是否为小写
str.isupper() 是否为大写
str.isspace() 是否为空格
'My Name Is'.istitle() 是否每个字母都大写

 >>>"|".join(['seve','jack','rain'])
'seve|jack|rain'

>>> n4.ljust(40,"-")
'Hello 2orld-----------------------------'
>>> n4.rjust(40,"-")
'-----------------------------Hello 2orld'

str.lower() 大写变小写
str.upper() 小写变大写

str.strip() 去掉两边的空格和回车
str.lstrip()
str.rstrip()

>>>p = str.maketrans('abcdef', '123456')
>>>print('severen'.translate(p))
s5v5r5n

msg.swapcase() 大小写互换

str.replace(old, new, count) 从左到右替换count个,无第三个参数默认全部替换

str.rfind(v) 找到最右边的v的下标
str.split(v) 按照v分割str,返回list,默认v为空格

 >>> msg.zfill(40)
'00000my name is {name}, and age is {age}'

3、字典操作

字典一种key - value 的数据类型
语法

info = {
    'stu1101': "Zhangsan",
    'stu1102': "Lisi",
    'stu1103': "Wangwu",
}

字典的特性:

  • dict是无序的
  • key必须是唯一的,so 天生去重

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info['stu1104'] = 'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}

#update
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> b = {1:2,3:4, "stu1105":"severen"}
>>> info.update(b)
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 1: 2, 3: 4, 'stu1105': 'severen'}

>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.pop("stu1101") # way1,有返回值
'bob'
>>> info
{'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> del info['stu1102'] #way2,无返回值
>>> info
{'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info.popitem() # way3,随机删除
('stu1104', 'severen')

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> info['stu1101'] = 'bob'
>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}

>>> info
{'stu1101': 'bob', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1104': 'severen'}
>>> 'stu1102' in info #标准用法
True
>>> info.get('stu1102') #获取
'Lisi'
>>> info['stu1102'] #同上
'Lisi'
>>> info['stu1105'] #如果一个key不存在,就报错,get不会,不存在只返回None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'stu1105'

>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.values()
dict_values(['Zhangsan', 'Lisi', 'Wangwu'])
>>> info.keys()
dict_keys(['stu1101', 'stu1102', 'stu1103'])
>>> info.items()
dict_items([('stu1101', 'Zhangsan'), ('stu1102', 'Lisi'), ('stu1103', 'Wangwu')])

others

#setdefault
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu'}
>>> info.setdefault('stu1106', 'severen') # 字典中不存在key,新增,返回value
'severen'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}
>>> info.setdefault('stu1102', 'bob') #字典中存在key,不修改原来的value,返回字典中的value
'Lisi'
>>> info
{'stu1101': 'Zhangsan', 'stu1102': 'Lisi', 'stu1103': 'Wangwu', 'stu1106': 'severen'}

多级字典嵌套及操作

data = {
	'浙江': {
		'台州': {
			'玉环': ['沙门', '楚门', '凯门'],
			'温岭': ['嶴环', '三门']
		},
		'宁波': {
			'镇海': {},
			'鄞州': {}
		},
		'杭州': {}
	},
	'北京': {
		'朝阳': {},
		'临平': {}
	},
	'广东': {}
}

>>> data['浙江']['台州']['玉环'][1] += 'haha'
>>> data['浙江']['台州']['玉环']
['沙门', '楚门haha', '凯门']

循环

#方法1
for key in info: #效率比方法2高
    print(key,info[key])

#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
    print(k,v)

4、集合操作

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

基本操作

s = set([3,5,9,10])      #创建一个数值集合  
t = set("Hello")         #创建一个唯一字符的集合 

t.add('x')            # 添加一项  
s.update([10,37,42])  # 在s中添加多项 

使用remove()可以删除一项:  
t.remove('H') # 不存在,会报错
t.discard('H') # 不存在,不会报错
t.pop() # 随机删除

set 的长度:
len(s)  

x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员

s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中

s.union(t)  
s | t  # t 和 s的并集
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  # t 和 s的交集
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  # 求差集(在s中,但不在t中)
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  # 对称差集(项在t或s中,但不会同时出现在二者中)
返回一个新的 set 包含 s 和 t 中不重复的元素
           
>>> list_1 = set([1,2,3,4,5])
>>> list_2 = set([6,7,8])
>>> list_1.isdisjoint(list_2) # 两个列表是否有交集
True
>>> list_1 = set([1,2,3,4,5,6])
>>> list_1.isdisjoint(list_2) 
False       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章