Python 内置数据结构字符串

Posted 123坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 内置数据结构字符串相关的知识,希望对你有一定的参考价值。

Python 内置数据结构字符串

1. 字符串的创建和赋值

字符串或串(Strinfg) 是有数字、字母、下划线组成的遗传字符。Python 里面最常见的类型。可以简单的通过在引号间(单引号、双引号和三引号)包含字符的方式创建它。

字符串 str:单引号,双引号,三引号引起来的字符信息;

第一种方式:单引号
s1 = 'hello'
第二种方式:双引号
s2 = "world"

第三种方式:三引号

三引号第一个作用是:进行多行注释;
第二个作用是:定义多行字符串。

s3 = """
    ***学生管理系统***
    """

转移符号:一个反斜杠加一个单一字符可以表示一个特殊字符,通常是不可打印的字符。

字符串是不可变的,只能通过一个空字符串或者使用del语句来清空或者删除一个字符串但是没有必要显示的删除字符串。第一这个字符串的代码结束时会自动释放这些字符串。

2. 字符串的基本特性

  1. 连接操作符合重复操作符:
name = 'westos'
print('hello ' + name)
print('hello' + str(1))  # 字符串只能和字符串相连接
print("*" * 10 + '学生管理系统' + '*' * 10)

  1. 成员操作符:
s = 'hello westos'
print('westos' in s)  # True
print('westos' not in s)  # False

  1. 正向索引和反向索引

正向索引:从左往右数,第一个索引为0;
反向索引:从右往左数。

s = 'WESTOS'
print(s[0])  # 'W'
print(s[3])  # 'T'
print(s[-2])  # 'O'

  1. 切片
"""
回顾:
    range(3):[0, 1, 2]
    range(1, 6, 2):[1, 3, 5]
切片:切除一部分的内容
    s[start:end:step]
    s[:end]
    s[start:]    
总结:
    s[:n]:拿出前n个元素
    s[n:]:除了前n个元素,其他元素保留
    s[:]:从头开始访问一直到字符串结束的位置
    s[::-1]:倒叙输出
"""
s = 'hello westos'
print(s[1:3])  # 'el'
print(s[:3])  # 'hel'
print(s[:5])  # 拿出字符串的前5个字符
print(s[1:])  # 'ello westos'
print(s[2:])  # 'llo westos'
print(s[:])  # 拷贝字符串
print(s[::-1])	#倒叙输出

  1. 可迭代对象/ for循环
s = 'westos'
count = 0
for item in s:
    count += 1
    print(f"第count个字符:item")

**练习:**用户输入一个字符串,判断该字符串是否为回文字符串。
eg:“aba” 是回文字符串,’abba’也是回文字符串,“abc"不是回文字符串。

s = input("请输入字符串:")
s1 = s[::-1]
if s == s1:
    print(f'输入的字符串s为回文字符串')
else:
    print(f'输入的字符串s不是回文字符串')

另一种写法:

s = input('输入字符串:')
result = "是回文字符串" if s == s[::-1] else "不是回文字符串"
print(s + result)

3. 字符串内建方法

字符串的创建和转换:

  1. 类型的判断
    s = ‘HelloWESTOS’
    print(s.isalnum()) #Ture #是否为数字或字母
    print(s.isdigit()) #False #是否为数字
    print(s.isupper()) #False #是否为大写字母

  2. 类型的转换
    print(‘hello’.upper()) #转换为大写
    print(‘HellO’.lower()) #转换为小写
    print(‘HellO WOrld’.title()) # 转换成标题
    print(‘HellO WOrld’.capitalize()) #转换成首字母大写,其他字母小写
    print(‘HellO WOrld’.swapcase()) #大小写反转

**练习:**需求: 用户输入Y或者y 符继续执行
yum install httpd安装httpd服务;

choice = input('是否继续安装程序(y|Y):')
if choice.lower() == 'y':
    print("正在安装程序......")

  1. 字符串开头和结尾的判断

以什么开头startswitch,比如在爬取一定的数据时;

url = 'ftp://www.baidu.com'
if url.startswith('http'):
    #  具体实现爬虫,可以看request模块。
    print(f'url是一个正确的网址,可以爬取网站的代码')

以什么结尾endswith,常用来判断文件的类型

filename = 'hello.png'
if filename.endswith('.png'):
    print(f'filename 是图片文件')
elif filename.endswith('mp3'):
    print(f'filename 是音乐文件')
else:
    print(f'filename是未知文件')

pycharm 常用快捷键:
如何查看方法的源代码和解释说明:ctrl 键按住,鼠标移动到想要查看方法的位置,点击即可进入源码及方法说明。

  1. 字符串的数据清洗

数据清洗的思路:

lstrip: 删除字符串左边的空格(指广义的空格:\\n,\\t,'')
rstrip: 删除字符串右边的空格(指广义的空格:\\n,\\t,'')
strip: 删除字符串左边和右边的空格(指广义的空格:\\n,\\t,'')
replace: 替换字符,删除中间的空格,将空格置换为空。replace(" ","")

删除字符串的空格时,默认删除的是所有空格。如:\\n 换行符,\\t制表符以及真正的空格。

s1 = '  he  llo '
print(s1.strip())	#删除字符串左边和右边的空格
print(s1.lstrip())	#删除字符串左边的空格
print(s1.rstrip())
print(s1.replace(" ",""))

  1. 字符串的位置调整

s = '学生管理系统'
print(s.center(50,"*"))	#字符串居中也长度为指定宽度
print(s.center(50,"-"))	
print(s.ljust(50,"-"))	#字符串左对齐且长度为指定宽度
print(s.rjust(50,"-")) #字符串右对齐且长度为指定宽度

  1. 字符串的搜索和统计

find 如果找到子串,则返回字串开始的索引位置。否则返回-1
index 如果找到子串,则返回子串开始的索引位置。否则报错(抛出异常)
count 用来统计子串所在字符串的数量,可以用 dir(s)加变量名来查询用法。

s = "hello westos"
print(s.find('llo'))
print(s.index('llo'))
print(s.find('xxx'))
# print(s.index('xxx'))		#找不到返回异常
print(s.count('xxx'))
print(s.count('l'))
print(s.count('o'))

dir(s)可以看到有哪些方法.

  1. 字符串的分离和拼接

**如:**判断IP地址的合法性, 将ip的每一位数字拿出,判断每位数字是否在0-255之间。

IP = '172.25.254.100'
print(IP.split('.'))    #切割['172', '25', '254', '100']
ip = ['172', '25', '254', '100']
# 需求: 将四个数字用‘-’拼接起来
print('-'.join(ip)) #172-25-254-100	#拼接

  1. 其他内置方法

len() 返回字符串的字符数;
max() and min() 返回最大或者最小的字符,(按照 ASCII 码值排列);
enumerate() 枚举对象同时列出数据和数据下标
zip() 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

s = 'hello'
print(len(s))
print(max(s))
print(min(s))
print(max(s) and min(s))    #最大或者最小的
for i,v in enumerate(s):
	print(str(i) + "--->" + v)
s1 = 'abc'
s2 = '123'
for i in zip(s1,s2):
	print(i)

4. String 模块

  1. random 随机数
import random		#导入模块
a = random.choice("0123456789")		#随机生成一个数
b = random.randint(10,80)			#在给定的范围内生成一个整数
print(a)
print(b)
  1. string
import string
a = string.digits	#生成所有数字0-9
b = string.ascii_letters	#生成所有字母,从a-z和A-Z
print(a)
print(b)

两者结合生成随机数和随机字母;

import random
import string
a = random.sample(string.ascii_letters,4)
b = random.sample(string.digits,2)
print(a)
print(b)

如现在需要来生成100个验证码,每个验证码由2个数字和4个字母组成;

import random
import string

# print(string.ascii_letters)
# print(string.digits)
# s = random.sample(string.ascii_letters,4)
# w = random.sample(string.digits,2)
for i in range(100):
    # x = "".join(random.sample(string.ascii_letters,4))	#将其拼接起来
    # y = "".join(random.sample(string.digits,2))
    print("".join(random.sample(string.ascii_letters,4)) + "".join(random.sample(string.digits,2)))

5. 练习

**练习1 :**小学生计算能力测试系统
设计一个程序,用来实现帮助小学生进行算术运算练习,它具有以下功能:提供基本算术运算(加减乘)的题目,每道题中的操作数是随机产生的,练习者根据显示的题目输入自己的答案,
程序自动判断输入的答案是否正确并显示出相应的信息。最后显示正确率。

思路:
运行程序, 输入测试数字的大小范围
输入测试题目数量
任意键进入测试
系统进行测试并判断对错
系统根据得分情况进行总结,退出程序.

import random
# 1+2=?
# 3*6=?
count = int(input("test numbers: "))
right_count = 0
for i in range(count):
    num1 = random.randint(1,10)
    num2 = random.randint(1,10)
    symbol = random.choice(["+","-","*"])
    result = eval(f'num1symbolnum2')  #此函数为算法函数
    #if symbol == "+":
    #    result = num1 + num2
    #elif symbol == "-":
    #    result = num1 - num2
    #elif symbol == "*":
    #    result = num1 * num2
    question = f"num1 symbol num2 = ?"
    print(question)
    user_answer = int(input("Answer:"))
    if user_answer == result:
        print("Right")
        right_count += 1
    else:
        print("Error")
print("Right percent: %.2f%%" %(right_count/count*100))

练习2 :
编写一个函数来验证输入的字符串是否是有效的 IPv4 ?
1). IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,
其范围为 0 - 255, 用(".")分割。
比如,172.16.253.1;
2). IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IP= input("Please input IPV4:")
flag=True
ipnum = IP.split(".")
if IP.count('.')==3 and len(ipnum) ==4:
    if ipnum[0].isdigit() and int(ipnum[0]) <=255 and int(ipnum[0]) >=1:
        for i in range(1,4):
            if not ipnum[i].isdigit():
                flage=False
                break
            elif not 0<= int(ipnum[i]) <=255:
                flag=False
                break
            else:
                flag=True
    else:
        flag=False
else:
        flag=False

if flag==True:
    print("IPV4")
else:
    print("Neither")

练习3:

在二维平面上,有一个机器人从原点(0,0)开始,给出它移动顺序,判断这个机器人在完成移动后是否在(0,0)处结束

移动顺序由字符串表示,字符 move[i] 表示第 i 次移动。机器人的有效动作有 R(右)、L(左)、U(上)、D(下)。如果机器人在完成所有动作后返回原点,则返回true,否则false

注:机器人“面朝”的方向无关紧要。“R”始终使机器人向右移动一次,“L”始终是向左移动等。此外,假设每次移动机器人的移动幅度相同。

orientation = input("上(U),下(D),左(L),右(R) :")
U=1
D=1
R=1
L=1
for i in orientation:
    if i == "U":
        U+=1
    elif i == "D":
        D+=1
    elif i == "R":
        R+=1
    elif i == "L":
        L+=1
    else:
        print("请输入正确的方向!!")
print("True" if U==D and R==L else "False")

以上是关于Python 内置数据结构字符串的主要内容,如果未能解决你的问题,请参考以下文章

请编写一个Python函数check_huiwen(s),判断非空字符串s是不是广义回文字符串?

java字符串倒叙,字符串从后向前JAVA

JS使用Enter事件将输入的字符倒叙输出

JS使用Enter事件将输入的字符倒叙输出

将一段(英文)按照字符出现的频率进行倒叙排列

Python 使用列表的sort()进行多级排序实例演示,list的sort()排序方法使用详解,python3中sort()的cmp自定义排序方法,sort()的逆序倒叙排序方法