1. 列表:
1)标志:[ ] ;它是python中的一种数据结构,它是一种有序的集合,可以随时添加和删除其中的元素
2)基本操作:
创建
my_list1 = [ ] #创建一个空的列表
my_list2 = [ 1,2,3,4,5,6,7,8,9,0] #创建包含十个元素的列表
my_list3 = [1,'hello,world',(1,2),2.0] #创建包含4个元素的列表,列表可以存储不同数据类型的元素
append()—向列表的尾部添加元素
my_list = []
var_1 = 'laozhou'
my_list.append('hello')
print(my_list)
>>>['hello']
my_list.append(var_1)
print(my_list)
>>>['hello','laozhou']
insert—把元素插入到指定的位置,比如索引号为1的位置
my_list3.insert(1,'laozhou')
print(my_list3)
>>> [1,'laozhou','hello,world',(1,2),2.0]
pop()–删除list末尾的元素或者指定位置的元素
my_list2.pop()
print(my_list2)
>>> [ 1,2,3,4,5,6,7,8,9]
my_list2.pop(1)
print(my_list2)
>>> [ 1,3,4,5,6,7,8,9,0]
del()–用于列表中,删除一个或几个元素
del my_list2[0]
print(my_list2)
>>> [ 2,3,4,5,6,7,8,9,0]
del my_list2[1:-1]
print(my_list2)
>>> [ 1,0]
del my_list2 #删除整个列表
print(my_list2)
>>>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
列表的深浅拷贝
s = [[1,2],3,4]
s1 = s.copy()
print(s)
print(s1)
>>>[[1, 2], 3, 4]
>>>[[1, 2], 3, 4] #拷贝出的列表s1与原列表s完全一致
s = [[1,2],3,4]
s1 = s.copy()
s1[1] = 'oliver'
s1[0][1] = 'hello'
print('列表s:',s)
print('列表s1:',s1)
>>>列表s: [[1, 'hello'], 3, 4]
>>>列表s1: [[1, 'hello'], 'oliver', 4]
import copy
s = [[1,2],3,4]
s2 = copy.deepcopy(s) #深拷贝
s2[0][1] = 'abc'
print('列表s:',s)
print('列表s2:',s2)
>>>列表s: [[1, 2], 3, 4]
>>>列表s2: [[1, 'abc'], 3, 4]
#1、浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化。
#2、深拷贝是指将原列表完全克隆一份新的。
列表的方法
2.元组
1)标志:() #元组(tuple)也是一种有序列表,和list非常相似,但是tuple一旦创建就不可修改
2)基本操作 :
创建
tup_1 = ()
tup_2 = (1,) #当元组里面只有一个元素的时候,需要在其末尾添加逗号‘,’。
tup_3 = (1,2,3)
tup_4 = t = ('a', 'b', ['A', 'B'])
由于其不可变性,所以没有append(),insert()等方法。所以代码更加安全。但可以正常的引用。
t = ('a', 'b', ['A', 'B'])
t[2][0] = 'X'
t[2][1] = 'Y'
print( t)
>>>('a', 'b', ['X', 'Y']) #为什么这里还是改变tuple里面的元素值呢?
先来看下图
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素。tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向’a’,就不能改成指向’b’,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
图片引用自https://www.liaoxuefeng.com/wiki/1016959663602400/1017092876846880)
3.string字符串
1)定义:用单引号或者双引号括起来的就是字符串 例如:‘abc’ “ABC”
2)基本操作:
±–用来连接两个或多个字符串
str_1 = 'hello ,'
str_2 = 'world'
print(str_1 + str_2)
>>>'hello ,world'
*
1:表示乘号
2:表示倍数
3:单个*---用来接收任意多个参数并将其放在一个元组中
def demo( * p):
print(p)
demo(1,2,3)
>>>(1,2,3)
4:函数在调用多个参数时,在列表,元组,集合,字典及其他可迭代对象最为实参,并在前面加*,如*(1,2,3)解释器将自动进行解包然后传递给多个单变量参数(参数个数要对应相等)
def d(a,b,c):
print(a,b,c)
d(1,2,3)
>>>1 2 3
a=[1,2,3]
b=[1,2,3]
c=[1,2,3]
d(a,b,c)
>>>[1, 2, 3] [1, 2, 3] [1, 2, 3]
5、两个 ** 如: **parameter用于接收类似于关键参数一样赋值的形式的多个实参放入字典中(即把该函数的参数转换为字典)。
def demo(**p):
for i in p.items():
print(i)
demo(x=1,y=2)
>>>('x', 1)
>>>('y', 2)
读取方式
python 不支持单字符类型,单字符在 python 中也当作字符串来处理,读取字符串可以使用方括号进行截取
var_1 = 'helloworld'
print(var[ 2:4 ])
>>>'ll'
字符串的相关方法
#python中的字符串的不可变对象,所以所有的修改和生成字符串的操作的实现方法都只是在另一个内存片段中新生成一个字符串对象,不会对原有的字符串进行修改#
1.1 大小写
my_str.lower()
my_str.upper()
1.2 首字母大写
my_str..title()
my_str.capitalize()
1.3 大小写转换
my_str..swapcase()
2.1 isXXXX判断
my_str.isdigit() #判断是否是数字 返回布尔值
my_str.isalpha() #判断是否是字母
my_str.isalnum() #判断是否是字母或者数字
my_str.islower() #判断是否是小写
my_str.isupper() #判断是否是大写
my_str.istitle() #判断是否是首字母大写
3.1 替换 replace
my_str.replace(old,new)
4.1 aplit , rsplit
#split()根据sep对S进行分割,maxsplit用于指定分割次数,如果不指定maxsplit或者给定值为"-1",
则会从做向右搜索并且每遇到sep一次就分割直到搜索完字符串。
如果不指定sep或者指定为None,则改变分割算法:以空格为分隔符,且将连续的空白压缩为一个空格。
rsplit()和split()是一样的,只不过是从右边向左边搜索。
my_str.split(sep=None, maxsplit=-1)
my_str.rsplit(sep=None, maxsplit=-1)
5.1 my_str.join(iterable)
将可迭代对象(iterable)中的字符串使用my_str连接起来。注意,iterable中必须全部是字符串类型,否则报错
字符串
>>> L='python'
>>> '_'.join(L)
'p_y_t_h_o_n'
元组
>>> L1=('1','2','3')
>>> '_'.join(L1)
'1_2_3'
集合。注意,集合无序。
>>> L2={'p','y','t','h','o','n'}
>>> '_'.join(L2)
'n_o_p_h_y_t'
列表
>>> L2=['py','th','o','n']
>>> '_'.join(L2)
'py_th_o_n'
字典
>>> L3={'name':"malongshuai",'gender':'male','from':'China','age':18}
>>> '_'.join(L3)
'name_gender_from_age'
6.1 修剪:strip lstrip 和 rstrip
my_str.strip([chars])
my_str.lstrip([chars])
my_str.rstrip([chars])
分别是移除左右两边、左边、右边的字符char。如果不指定chars或者指定为None,则默认移除空白(空格、制表符、换行符)。
唯一需要注意的是,chars可以是多个字符序列。在移除时,只要是这个序列中的字符,都会被移除。
>>> ' spacious '.lstrip()
'spacious '
>>> ' spacious '.rstrip()
' spacious'
>>> 'spacious '.lstrip('s')
'pacious '
>>> 'spacious'.rstrip('s')
'spaciou'
移除字符中的字符
>>> print('www.example.com'.lstrip('cmowz.'))
example.com
>>> print('wwwz.example.com'.lstrip('cmowz.'))
example.com
>>> print('wwaw.example.com'.lstrip('cmowz.'))
aw.example.com
>>> print('www.example.com'.strip('cmowz.'))
'example'
由于www.example.com的前4个字符都是字符序列cmowz.中的字符,所以都被移除,而第五个字符e不在字符序列中,所以修剪到此结束。同理wwwz.example.com。
wwaw.example.com中第3个字符a不是字符序列中的字符,所以修剪到此结束。