python数据结构--字符串

字符串
1.定义:
字符串是一个有序的,不可修改的,以引号(单引/双引号)包围的序列
单引号: ' '
双引号: “” “”
三单引号:' ' ‘(多用于代码注释)
三双引号: “ “ “(多用于代码注释)
单引号和双引号的区别?
都是为字符串的标准格式,只是为了区分英语中的一些语义

>>> print("I ' am 18")
I ' am 18
>>> print('I "am 18')
I "am 18
>>>
>>> print ('''
... 1
... 2
... 3
... ''')

1
2
3

>>> print("""
... 1
... 2
... 3
... """)

1
2
3
  1. 字符串拼接
>>> a = "jrljs"
>>> b = " is"
>>> c = " nice"
>>> d = a + b + c
>>> d
'jrljs is nice'

3.特殊字符
特殊字符就是在字符串当中起到特殊含义的字符
”\“ 转义符,将字符串当中的具有特殊含义的字符的特殊含义取消掉后继续执行;
"\n" 换行;
”\t“ 水平制表符,等同于tab键
”\“ 反斜杠符

占位符
在字符串当中以指定的格式符号进行占位,然后将指定的数据传入字符串
%s 字符串占位符
%d 数字占位符
%f 浮点占位符
%.2f 控制浮点型数字占位符

>>> print("My name is %s"%("jrljs"))
My name is jrljs
>>> print("My name is %s"%('jrljs'))
My name is jrljs
>>> print('My name is %s'%('jrljs'))
My name is jrljs
>>>
>>> print("I am %d years old"%(18))
I am 18 years old
>>>
>>> print("My height is %f m"%(1.70))
My height is 1.700000 m
>>>
>>> print("My height is %.2f m"%(1.70))
My height is 1.70 m

4.字符串的索引
字符串中的每一个个体都称作字符也是该字符串的一个元素,每一个元素都对应一个索引值(下标),可以使用len()方法查看一个序列的长度
比如字符串'jrljs',可以按照下图理解其下标概念,索引号从0开始

j r l j s
0 1 2 3 4

字符串截取:字符串[start:end]
截取原则:包头不包尾且截取方向是从左到右

>>> name = "jrljs"
>>> print(name[1:4])
rlj

步长截取:字符串[start:end:step] 按照step步长进行隔取;
截取原则:包头不包尾
默认步长:字符串[start:end:step] 这三个参数都有默认值,start,默认值为0;end,默认值字符串结尾元素;step,默认值为1
步长:默认值为1,那么它的取值范围应该是1-1=0,即全部都取出来;
步长为2,即2-1=1,即隔一个元素取一个;
依次类推...

若step>0,表示从左向右进行切片,此时start必须小于end才有结果。
若step<0,还是表示从左到右,只不过要反过来切片,此时start必须大于end才有结果。可以分两步理解,第一步先反取,即[::-1]; 第二步按照从左到右,根据步长依次取值
string = "hello world"

>>> print(string[0:7])
hello w
>>> print(string[:7])
hello w
>>>
>>> print(string[2:])
llo world
>>> print(string[:])
hello world
>>> print(string[::])
hello world
>>> print(string[::1])
hello world
>>> print(string[::2])
hlowrd
>>>
>>> print(string[::1])
hello world
>>> print(string[::-1])
dlrow olleh
>>> print(string[9:1:-1])
lrow oll
>>> print(string[9:1:-2])
lo l
>>> print(string[1:9:-2])

>>>
  1. 字符串查找
参数 描述
count 计数功能,返回自定义字符在字符串中的总个数
find 查找,返回从左第一个指定字符的索引,找不到返回-1
rfind 查找,返回从右第一个指定字符的索引,找不到返回-1
index 查找,返回从左第一个指定字符的索引,找不到报错
rindex 查找,返回从右第一个指定字符的索引,找不到报错
>>> print(string)
hello world
>>> print(string.count("l"))
3
>>> print(string.find("l"))
2
>>> print(string.rfind("l"))
9
>>> print(string.find("L"))
-1
>>> print(string.rfind("L"))
-1
>>> print(string)
hello world
>>> print(string.index("o"))
4
>>> print(string.rindex("o"))
7
>>> print(string.index("O"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> print(string.rindex("O"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

6.字符串分割与替换

参数 描述
partition 把mystr以str进行分割,分割成三部分,str前,str自身和str后
rpartition 类似于 partition()函数,不过是从右边开始.
splitlines 按照行分隔,返回一个包含各行作为元素的列表,按照换行符分割
split 判断字符串的分隔符切片
replace 从左到右替换指定的元素,可以指定替换的个数,默认全部替换
>>> print(string)
hello world
>>> print(string.partition("o"))
('hell', 'o', ' world')
>>> print(string.rpartition("o"))
('hello w', 'o', 'rld')
>>>
>>>
>>> print(string)
hello world
>>> print(string.splitlines())
['hello world']
>>> print(string.split())
['hello', 'world']
>>> string2 = "hello\n world\n python\n"
>>> print(string2)
hello
 world
 python

>>> print(string2.splitlines())
['hello', ' world', ' python']
>>> print(string2.split())
['hello', 'world', 'python']
>>>
>>>
>>> print(string)
hello world
>>> print(string.replace('o','O'))
hellO wOrld
>>> print(string.replace('o','O',1))
hellO world

7.字符串修饰

参数 描述
center 让字符串在指定的长度居中,如果不能居中左短右长,可以指定填充内容,默认以空格填充
ljust 让字符串在指定的长度左齐,可以指定填充内容,默认以空格填充
rjust 让字符串在指定的长度右齐,可以指定填充内容,默认以空格填充
zfill 将字符串填充到指定的长度,不足地方用0从左开始补充
format 按照顺序,将后面的参数传递给前面的大括号
strip 默认去除两边的空格,去除内容可以指定
rstrip 默认去除右边的空格,去除内容可以指定
lstrip 默认去除左边的空格,去除内容可以指定
>>> print(string)
hello world
>>> print(string.center(15))
  hello world
>>> print(string.center(15,'*'))
**hello world**
>>>
>>>
>>> print(string.ljust(15))
hello world
>>> print(string.ljust(15,'*'))
hello world****
>>> print(string.rjust(15,'*'))
****hello world
>>>
>>>
>>> print(string)
hello world
>>> print(string.zfill(15))
0000hello world
>>>
>>>
>>> string = ' hello world '
>>> print(string)
 hello world
>>> print(string.strip())
hello world
>>> print(string.lstrip())
hello world
>>> print(string.rstrip())
 hello world
>>>
>>>
>>> string = "{0} is {1}"
>>> print(string.format("jrljs","nice"))
jrljs is nice

8.字符串变形

参数 描述
upper 将字符串当中所有的字母转换为大写
lower 将字符串当中所有的字母转换为小写
swapcase 将字符串当中所有的字母大小写互换
title 将字串符当中的单词首字母大写,单词以非字母划分
capitalize 只有字符串的首字母大写
expandtabs 把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8,可以试下8,12
>>> print('hello'.upper())
HELLO
>>>
>>> print('HELLO'.lower())
hello
>>>
>>> print('HH##ZZ'.swapcase())
hh##zz
>>> print('*qwe*'.swapcase())
*QWE*
>>>
>>> print('I \t is \t 18'.expandtabs())
I        is      18
>>> print('I \t is \t 18'.expandtabs(10))
I          is        18
>>> print('I \t is \t 18'.expandtabs(4))
I    is      18
  1. 字符串判断
参数 描述
isalnum 判断字符串是否完全由字符或数字组成
isalpha 判断字符串是否完全由字母组成
isdigit 判断字符串是否完全由数字组成
isupper 判断字符串当中的字母是否完全是大写
islower 判断字符串当中的字母是否完全是小写
istitle 判断字符串是否满足title格式
isspace 判断字符串是否完全由空格组成
startswith 判断字符串的开头字符,也可以截取判断
endswith 判断字符串的结尾字符,也可以截取判断
>>> print('123456'.isalnum())
True
>>> print('12345ab'.isalnum())
True
>>> print('abcde'.isalnum())
True
>>>
>>> print('abcdef'.isalpha())
True
>>> print('abcdef#'.isalpha())
False
>>> print('abcdef3#'.isalpha())
False
>>>
>>> print("123456".isdigit())
True
>>> print("#####".isdigit())
False
>>> print("abcdef".isdigit())
False
>>>
>>> print('HELLO'.isupper())
True
>>> print('HELLOaabbcc'.isupper())
False
>>> print('aabbcc'.isupper())
False
>>>
>>> print('Wo Ow'.istitle())
True
>>> print('wO oW'.istitle())
False
>>>
>>> print('  '.isspace())
True
>>> print(' Welcome '.isspace())
False
>>>
>>> print('Welcome'.startswith('W'))
True
>>> print('Welcome'.startswith('Wel'))
True
>>> print('Welcome'.endswith('e'))
True
>>> print('Welcome'.endswith('come'))
True
>>>

10.字符串编码
encode 是编码
decode 是解码

>>> u = "陆"
>>> str1 = u.encode('gbk')
>>> print(str1)
b'\xc2\xbd'
>>> print(str2)
b'jrljs'
>>> str2 = u.encode('utf-8')
>>> print(str2)
b'\xe9\x99\x86'
>>>
>>> u1 = str1.decode('gbk')
>>> print(u1)
陆
>>> u2 = str2.decode('utf-8')
>>> print(u2)
陆

拓展
在python中解决编码问题
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行(python3默认为utf-8 所以没必要加文档头):
1、# -- coding: utf-8 --
2、#coding=utf-8


练习作业:
BMI指数(Body Mass Index) 以称身体质量指数
BMI值计算公式: BMI = 体重(公斤) / 身高的平方(米)
例如:
一个人69公斤,身高是173公分
BMI = 69 / 1.73**2 = 23.05
标准表:
BMI < 18.5 体重过轻
18.5 <= BMI < 24 体重正常
BMI > 24 体重过重
要求: 输入身高的体重,打印出BMI的值并打印体重状况

解答:

weight = int(input("请输入你的体重(kg):"))
hight = float(input("请输入你的身高(m):"))
BMI = weight/pow(high,2)
if BMI < 18.5:
    print(“体重过轻”)
elif BMI > 18.5:
    print("体重过重")
else
    print("体重刚刚好")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341