python变量和数据类型
!!!个人主页:个人主页
!!!推荐一款模拟面试、刷题神器,从基础到大厂面试题:点击此处进入牛客网注册学习吧
!!!今日的努力,明日的未来
- 字符串:python中的文本数据是通过str对象来处理的,字符串是由有一系列的Unicode码位所组成的不可变序列。字符串不可分割不可更改
s = '春分'
print(s)
print(len(s)) #字符串的长度
print(s.encode()) #encode——解码
print(s.encode().decode()) #decode——编码
不可变是在说无法对字符串的本身进行修改,
-
序列:字符串继承序列类型(列表、元组、range)
[i.upper() for i in 'Hello'] #['H', 'E', 'L', 'L', 'O']
序列是容器类型,‘成员’们站成了有序的队列,我们从0开始进行对每一个成员进行标记,0,1,2,3……这样,便可以通过下标来访问序列中的一个或几个成员
序列类型操作符
-
成员关系操作符:(in,not in)判断某元素是否属于成员里头
-
链接操作符(+):拼接
-
重复操作符(*):
用法:s * n*用于指定序列重复次数
当n的值小于0的时候都按照n = 0 对待(将结果返回一个与s类型相同的空序列)
另外需要注意的是序列s中的元素并没有被复制,他们只是被引用了多次。lists = [[]]*3 lists #[[], [], []] list[0].append(3) lists # [[3], [3], [3]]
[[]]是一个单元素列表,包含一个空列表,所以[[]]*3中的三个元素都引用这个空列表。这三个列表都是指向同一个空列表,修改其中的任意一个元素都会改变这个空列表。eg:
lists = [[] for i in range(3)] lists[0].append(3) lists[1].append(5) lists[2].append(7) lists #[[3],[5],[7]] lists = [[]*3] #[[]] 这时的重复操作针对的是元素而不是容器本身
-
切片操作符([]、[:]、[: :])
通过切片功能可以访问序列的一个或者多个成员。和C一样,在访问单个成员时你要保证你要访问下标的成员是否存在,否则会引发IndexError异常 -
索引——访问单个成员[]
astr = 'Python' astr[0] #P astr[3] #h
注意,因为-0等于0,负数的索引从-1开始
-
切片——访问连续的多个成员[satrting_index:ending_index]
切片索引有默认值,默认的起始索引是0,默认的终止索引是所要切片的字符串的长度。
注意起始索引是包含进来的,终止索引是排除在外的。所以,s[:i]+s[i:]永远等于s
记住切片如何工作的一种方法是将索引看作是字符间的点,第一个字符的左侧的位置为0,最后一个字符的左侧位置为字符的长度。比如:+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
另外需要注意的是,当使用切片访问连续的多个成员时超出索引范围将超出索引范围将·被很好的处理
-
以等差数列形式的下标进行访问:[starting_index:ending_index:step_length]
step_length表示的是步长:- step_length为正,则从左到右切片,如果staring_index>ending_index,则为空
- step_length为负,则从右往左切片,如果starting_index<ending_index,则为空
- staring_index和ending_index填空,前者表示最开始,后者表示最后一个,同时为空的时候,表示取所有。至于方向,取决于step_length。
从i到j具有步长k的s的切片被定义为索引x=i+nk的项目序列,使得0<=n<(j-1)/k.换句话说,索引是i,i+k,i+2k,i+3k……当到达j时停止(但不把包括j)。当k为正时,如果i和j更大,则他们将减少为len(s)-1.如果i或j被省略或或没有,他们将称为“end”值(end取决于k的符号)。注意,k不能为0。如果k为None,则将其视为1.
(1,2,3,4,5,6)[0:6:3] #(1,3,5) bstr = "abcdefg" bstr[::-1] # 返回'gfedcba',瞬间反转,未添加的参数默认为开始和结束 bstr[::] # 返回'abcdefg',未添加的参数都使用默认值 cstr = '012345' cstr = '012345' # '543210' cstr[None::-1] # '543210' cstr[-1::-1] # '543210' cstr[-1:None:-1] # '543210' cstr[-1:len(cstr)-1:-1] # '' cstr[:0:-1] # '54321'
-
用于序列的内建函数:
- max()返回序列的最大值
- min()返回序列的最小值
- sum()返回列表的所有元素之和
- enumerate(iter)接收一个可迭代对象,返回一个enumerate对象,该对象生成iter的每一个成员的index值和iterm值构成的数组
- reversed(seq)返回一个序列的逆向迭代器
- zip()返回有个zip对象,其成员为zip(a,b)分别为ab中取出对应元素和成的一个元组
字符串的创建
-
三种创建字符串的方式:单引号、双引号、三引号
其中,三引号创建的字符可以跨越多行,其中的空白(例如每行的换行符及行首或行末的空格)会被包含进所创建的字符串字面值
python允许空字符串‘ ’,他不包含任何字符但完全合法。空字符串是其他任何字符串的子串。
字符串字面量是一个单独的表达式,如果多个字符串字面量中间仅包含空白,则他们将他们被隐性地转换成一个单一的字符串字面量。所以, (“spam” “eggs”) == “spameggs”
同样,还可以使用str
构造器将其他对象转换为字符串str(98.6) # '98.6' str(True) # 'True'
-
使用
\
转义:
常用的转义符:\n
(换行符)、\t
(Tab制表符)、\r
(回车)、\'
(单引号)、\"
(双引号)、\\
(反斜杠) -
用于字符串的内建函数:
-
input()获得用户输入,返回一个字符串
dir(str) #查看一个对象的属性或方法
import getpass getpass.getpass() #密码操作
chr()接收一个整数,返回相应的Unicode字符
ord()功能与char()相反
-
字符串方法
- split()基于分隔符将字符串分割成由若干子串组成的列表,如果不指定分隔符,默认使用空白符进行分割
- join()将包含若干子串的组成的列表分解,并将这些子串通过指定的粘合用的字符串合并成一个完整的大的字符串
- find()查找返回字符串中的第一次出现子串的位置(偏移量),失败时返回-1
- index()与find()类似,但是查找失败的时候将触发ValueError异常
- rfind()与find()类似,但是返回最后一次子串出现的位置
- startswith()判断字符串是否以特定前缀开头的
- endswith()判断字符串是否以特定的后缀结尾
- count()统计子串在字符串中出现的位置
- is*判断字符串中的字符是否符合某种类型或者规则
- strip()返回移除开始和结尾空白字符的字符串,如果指定参数,将在字符串的开始和结尾移除参数中所包含的字符
- upper()、lower()、swapcase()分别将字符串所有字母转换成大写,转换成小写,大小写转换
- title()将字符串字符串中所有单词的开头字母变成大写
- capitalize()将字符串首字母变成大写
- center()、ljust()、rjust()分别将字符串将字符串根据指定长度居中对齐,左对齐,右对齐
- replace()进行简单的子串替换,需要传入的参数:需要被替换的子串,用于替换的新子串,以及需要替换多少