python学习No3

本文详细介绍了Python中字符串的表示方式、转义字符、下标与切片操作,以及字符串的常见操作如长度、查找、判断、替换、内容分割等。同时,讲解了列表的基本使用、操作、遍历、排序、反转、复制、嵌套和列表推导式。内容涵盖字符串格式化、字符编码和列表的各种实用技巧。
摘要由CSDN通过智能技术生成

字符串

字符串的表示方式

在python中,可以使用一对单引号、一对双引号或者一对三个双引号、一对三个单引号表示字符串
a=‘hello’
b=’‘hello’’
c=""“hello”""
d=’’'hello

#双引号和单引号的使用
#这是报错代码m="xiaoming said:"I am xiaomong ""
#原因是""  ""两两配对,I am xiaoming 就不被认为是字符串了
#可以如下表示
m='xiaoming said:"I am xiaoming"'
转义字符

’ =========> 显示一个普通的单引号
" =========>显示一个普通的双引号
\n =========>表示换行
\t ==========>表示一个制表符

字符串的下标和切片

下标又称索引,表示第几个数据
可迭代对象都可以遍历(str list tuple dict set range)
str list tuple 可以通过下标获取或者操作数据
在计算机中,下标都是从0开始,可以通过下标获取或者修改指定位置的数据。但字符串是不可变数据类型,对于字符串的任何操作都不会改变原有字符串。

#下标操作
word ='zhangsan'
print(word[4])#输出了g
#切片操作   m[start:end:step] 包含start没有end
#step是步长,理解为间隔,不能为0,可以是负数
m='abcdefghijklmn'
print(m[2:9])#cdefghi
print(m[2:9:2])#cegi
print(m[9:2:-1])#jihgfed

字符串的常见操作
长度
#使用内置函数len可以获取字符串的长度
m='abcdefghijklmn'
print(len(m))
#让字符串以指定长度显示,如果长度不够,默认在右边使用空格补齐
#超过指定长度原样打印
#ljust(width,fillchar)fillchar 默认为空格可以改变
print('Monday'.ljust(10))       #Monday    
print('Monday'.ljust(10,'*'))   #Monday****
print('Monday'.rjust(10))#右对齐
print('apple'.center(20))#居中
查找
#查找内容相关的方法  find/index/rfind/rindx 可以获取指定字符下标
print(m.find('l'))
print(m.index('l'))
print(m.find('p'))#如果字符在字符串中不存在,结果为-1
print(m.index('p'))#使用index,字符在字符串中不存在,会报错
#rfind和rindex和这两个用法类似,唯一不同在于字符串中有多个相同字符时,
#会找出最大下标

in 和not in

#判断用户输入的字符在字符串中是否存在
word='hello'
x=input('请输入一个字符')
for c in word:
    if x==c:
        print("输入存在")
        break
else:
    print("输入不存在")

if word.find(x)==-1:
    print('输入不存在')
else :
    print('存在')
if x in word:
    print('存在')
else:
    print("不存在")

查找相关函数的操作是ctrl+鼠标按住函数名称
在这里插入图片描述

判断

判断的是字符串内容是否为数字/字母/等等

#startswith,endswith,isalpha,isdigit,isalnum,isspace
#is开头的内置函数就是判断,结果时布尔类型

print('hello'.startswith('he') )#判断开头字符
print('hello'.endswith('o'))#判断结尾
print('he45llo'.isalpha())#判断是否为字符串/字符
print('good'.isdigit())#是否为数字
print('1234ddd'.isalnum())#判断是否由数字或字母组成
print('      '.isspace() )#是否全部是空格
替换
word='hello'
a=word.replace('l','x')
print(word)#字符串不可变
print(a)
内容分割

split:可以将一个字符串切割成一个列表
rsplit:与split用法相同,就是切割时从右向左切

x='a-b-c-d-e-f-g'
y=x.split('-')
print(y)#['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(x.split('-',2))#['a', 'b', 'c-d-e-f-g']
print(x.rsplit('-',2))#['a-b-c-d-e', 'f', 'g']

splitlines:换行符作为分割

m='hello\nworld'
print(m.splitlines() )

partition 指定一个字符串作为分割符,分为三部分的 元组

print('abcdefgHaaaaa'.partition('H') )#('abcdefg', 'H', 'aaaaa')
将列表转换为字符串
word=['a','b','s','d','f']
print('-'.join(word))
修改大小写

capitalize:让第一个单词的 首字母大写

print('hello'.capitalize() )
print('hello.good'.capitalize() )
print('hello\ngood'.capitalize() )

upper:所有字母大写

print('hello'.upper())

lower:所有字母小写

print('Wofda'.lower())

totle:每个首字母大写

print('good morning'.title())
去掉空格
print('        apple       '.lstrip())#去左边
print('        apple       '.rstrip())#去右边
print('        apple       '.strip())#都去
字符与编码

字符和数字编码存在对应关系,可使用chr和ord查看数字和字符对应关系

print(ord('a'))
print(ord('你'))
print(chr(65))
格式化打印字符串

可以使用%占位符表示格式化一个字符
%s 是字符串占位符
%d是整数占位符
%f是浮点数占位符

name='张三'
age=13
print('大家好,我的名字是',name,'我今年',age,'碎了')
#大家好,我的名字是 张三 我今年 13 碎了
print('大家好,我的名字是',name,'我今年',age,'碎了',sep='')
#大家好,我的名字是张三我今年13碎了
print('大家好,我的名字是%s,我今年%d碎了'%(name,age))
#大家好,我的名字是张三,我今年13碎了

format用法

{ }什么都不写,自动占位

x='大家好我是{},今年{}'.format('张三',18)
print(x)

{数字} 根据数字的顺序进行填入。从数字0开始

y='大家好,我是{1},我今年{0}岁了'.format(20,'jerry')
print(y)

{变量} 一一对应

x='大家好,我是{name},今年{age}碎了'.format(age=18,name='李四')
print(x)

python 中的快捷键(使用的pycharm)

  • 双击 shift 会弹出全局搜索功能 (jetbrains开发工具大多都有)
    如何关闭:双击shift打开—>actions----->registry–>找到ide.suppress.double.click.handler 选项,勾选
    (ctrl+shift+A也能打开)
  • 快速格式化代码 ctrl +alt+l
  • 快速复制粘贴的代码 ctrl+d
  • 快速移动一行代码 ctrl+shift+上下箭头
  • 改变快捷键方式在这里插入图片描述
    在这里插入图片描述
    在keymap中搜索即可(需要英文功底qaq)
  • 光标前后移动 fn+左右箭头
  • 多行注释掉 ctrl+/

列表

列表基本使用

当有多个数据需要按照一定顺序保存时,考虑用列表
1.使用中括号[]表示列表,列表里的每一个元素称之为元素,元素之间用逗号分割
2.使用list内置类,可将可迭代对象转换为一个列表
3.和字符串一样,都可以使用下标获取元素和对元素进行切片,但是列表可以改变元素值

names=['张三','李四','王五','六','七']
print(names)
name=list(('yi','er','san','si'))
print(name)
name[0]='qi'
print(name)
print(name[1:5])
列表的操作

增删改查
1.增加

heros=['花木兰','马超','韩信','露娜','赵云','李元芳',]
heros.append('铠')
print(heros)#append在列表最后追加一个数据
heros.insert(3,'李白')#在指定位置加入某数据
print(heros)
x=['马可波罗','米莱迪','狄仁杰']
#A.extend(B)将可迭代对象B添加到A
heros.extend(x)#拼接可迭代对象
print(heros)
print(x)

2.删除
删除有三个相关方法:pop remove clear

#pop方法默认删除列表里最后一个数据,并且返回这个数据
#pop还可以传入index参数,用来删除指定数据位置的数据
heros=['花木兰','马超','韩信','露娜','赵云','李元芳']
heros.pop(3)#删除heros[3]

print(heros)
#remove删除指定数据
heros.remove('李元芳')
heros.remove('赵云')
#clear 删除全部清空
heros.clear()
print('----')
print(heros)

删除列表中字符串

words = ['hello', 'good', '', '', 'ys', '']
for word in words:
    if word=='':
        words.remove(word)
print(words)#['hello', 'good', 'ys', '']
#最后一个没删掉,原因是在用for...in循环遍历时,元素改变了,所以
#以后用到for遍历,最好不要对元素进行增删操作
i=0
while i<len(words):
    if words[i]=='':
        words.remove(words[i])
        i=i-1#由于列表元素值变化所以i也变化
    i=i+1
print(words)
#方法三:
words = ['hello', 'good', '', '', 'ys', '']
words2=[]
for word in words:
    if word!='':
        words2.append(word)
words =words2
print(words)

3.查询

#查询
heros=['花木兰','马超','韩信','露娜','赵云','李元芳']
print(heros.index('花木兰'))
print(heros.count('马超') )
print('马超' in heros)

4.修改

heros=['花木兰','马超','韩信','露娜','赵云','李元芳']
heros[2]='铠'
print(heros)
列表的遍历

遍历针对的是可迭代对象
while 循环遍历/for… in循环遍历

heros=['花木兰','马超','韩信','露娜','赵云','李元芳']
for h in heros:#本质是不断调用迭代器的next方法
    print(h)
#交换两个变量的值
#方法1:
a=12
b=13
c=b
b=a
a=c
#方法二:
a=a+b
b=a-b
a=a-b
#方法三:
a=a^b
b=a^b
a=a^b
#方法四(python特有
a,b=b,a

冒泡排序

num=[9,8,7,6,5,4,3,2,1]
i=0
while i<10:
    i=i+1
    n = 0
    while n < len(num) - 1:
        if num[n] > num[n + 1]:
            num[n], num[n + 1] = num[n + 1], num[n]
        n += 1
print(num)
num=[9,8,7,6,5,4,3,2,1]
for i in range(0,len(num)-1):
    for j in range(0,len(num)-1-i):
        if num[j]>num[j+1]:
            x=num[j ]
            num[j]=num[j+1]
            num[j+1]=x
print(num)
列表的排序
num=[9,29,3,4,56,7,8]
num.sort()#调用列表sort方法
print(num)
num=[9,29,3,4,56,7,8]
num1=sorted(num)#内置函数sorted不会改变原有数据,会生成新的有序数据
print(num1)
列表的反转
names=['zhangsan','lisi','wangwu']
names.reverse()
print(names)
列表的复制

pyhnon的数据分为可变类型和不可变类型
不可变:字符串、数字、元组
可变:列表、字典、集合
不可变数据类型,如果修改值,内存地址会发生变化
可变数据类型,修改值,内存地址不会发生改变
(使用内置函数id获取变量内存地址)

a=12
b=a
print('修改前,a={},b={}'.format(id(a),id(b)))
a=10
print(b)
print('修改后,a={},b={}'.format(id(a),id(b)))

在这里插入图片描述

在这里插入图片描述
而列表的地址则不变

num1=[100,200,300]
num2=num1
print('修改前的num1=%x,num2=%x'%(id(num1),id(num2)))
num1[0]=1
print(num2)
print('修改后的num1=%x,num2=%x'%(id(num1),id(num2)))

在这里插入图片描述
列表的浅复制

x=[100,200,300]
y=x#y和x指向同一空间,会相互影响
x[0]=1
print(y)
#现要求改变y的同时x不变,两者不相互影响
#调用copy方法,可以复制一个列表
#这个列表和原有列表一样,但是指向不同内存空间
x=[100,200,300]
z=x.copy()
z[0]=1
print(x)
print(z)
#除了使用列表自带的copy方法以外,还可以使用copy模板实现拷贝
import copy
a=copy.copy(x)#效果等价于x.copy(),都是浅拷贝
#切片就是一个浅拷贝
num1=['a','b','c']
num2=num1[::]
num1[0]='dd'
print(num1,num2)
列表的嵌套

一个学校,有3个办公室,现有10位老师等待工位分配,请编写程序,完成分配

import random
teachers=['a','b','c','d','e','f','g','h','i','j']
rooms=[[],[],[]]
for teacher in teachers:
    room=random.choice(rooms)#choice 从列表里随机选择一个数据
    room.append(teacher)
print(rooms)
#第0房间有n个人,分别为
for room in rooms:
    print('房间里一共有%d个老师'%len(room))
    for teacher in room:
        print(teacher,end='\t')
    print()
 #打印下标   
 for i, room in enumerate (rooms):
    print('房间%d里一共有%d个老师'%(i,len(room)))
列表推导式

作用:使用简单语法创建一个列表

nums=[i for i in range(10)]#极简语法
print(nums)
#等价于
nums=[]
for i in range(10):
    nums.append(i)


y=[i for i in range(10) if i %2==0]
print(y)

写一个列表[1,2,3,4,5…,100]变成[[1,2,3],[4,5,6]…]

y=[i for i in range(10) if i %2==0]
print(y)
m=[i for i in range(1,101)]
print(m)
n=[m[j:j+3] for j in range(0,100,3)]
print(n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值