数据分析 --- day09python基础

一、字符

1. 什么是字符(str)

  • 容器型数据类型; 将’‘、“”、’‘’‘’'、“”“”""作为容器标志,里面的每个符合就是字符串中的元素

  • 元素: 可以是任何文字符号,包括:数字、字母、汉字、日语、韩语、表情符号、标点等
    不可变的(不支持增删改);有序的(支持下标操作)

任何文字符号都可以是字符串的元素

str1 = '10,20,30'       # 里边有8个元素
str2 = '12,=)*/DC键❀'

三个引号开头三个引号结束的字符串,在字符串中可以直接按回车换行

str3 = '123\nsdf'
print(str3)

str4 = """123
sdf"""
print(str4,type(str4))

2.转义字符

  • 字符 - 字符串中的元素(字符串每一个独立的符号)

  • 字符串的字符可以分为两种: 普通字符、转义字符

  • **普通字符: ** 在字符串中表示符号本身的字符

  • 转义字符: \和特定的一些符号组合在一起表示特殊功能或者意义的字符

转义字符是C语言创建的,但是很多都没有存在的价值了,目前常用的转义字符

转义字符 作用
\n 换行
\t 水平制表符(相当于按一次tab键)
\ 表示一个普通的单引号
\" 表示一个普通的双引号
\ 表示一个普通反斜杠

\u四位的16进制数 - 编码字符

str5 = 'abc'
print(str5)         # abc

str6 = '\m\k\l'
print(str6)         # \m\k\l

有一些C语言中转义字符,在其他编程语言中无效

str7 = 'ab\acde\f'
print(str7)

str8 = '\tabcdkf\n25586'
print(str8)

str9 = 'it\'s me'
str10 = "it's me"
print(str9,str10)

str11 = "I say : \"you see see, one day day\""
str12 = 'I say : \"you see see, one day day\"'
print(str11,str12,sep='\n')

str13 = '\\name\yuting\论文.txt'
print(str13)

编码字符

str14 = '\u78efdjvn '
print(str14)
str14 = '\u34efdjvn '
print(str14)

3.r-string(r字符串)

  • 在字符串的最前面加r或者R,可以让字符串中所有的转义字符功能消失(让字符串中所有字符变成普通字符)
str1 = '\tabc\n123'
str2 = r'\tabc\n123'
print(str1)
print(str2)

二、字符编码

1.编码值

  • 计算机存储数据的时候只能存储数字(存的是数字对应的二进制的补码)
  • 为了能够让计算机存储字符,给每个字符对应一个固定的数字,每次需要存储这个字符的时候就去存这个数字;
  • 每个字符对应的那个数字就是这个字符的编码值

2.编码表

编码表是用来保存不同字符对应的编码值的表

1. ASCII码表

有128个字符对应的编码值(只要包含英文符号和其他西欧语言对应的符号)

数字字符0~9从48开始连续递增    0~9 -> 48~57
大写字母A~Z从65开始连续递增    A~Z -> 65~90
大写字母a~z从97开始连续递增    a~z -> 97~122

2. Unicode编码表(Python)

是ASCII码表的扩展(包含了ASCII码表的数据),包含世界上所有国家和民族的语言对应符号

  • 中文范围: 4e00 ~ 9fa5

3.Python程序对编码值的应用

1. chr(编码值) - 获取指定编码值对应字符

print(chr(97),chr(65))

# 打印所有大写字母
for i in range(65,91):
    print(chr(i))


print(chr(0x4e00),chr(0x9fa5))

for i in range(0x4DC0,0x4DFF+1):
    print(chr(i),end='')

2. ord(字符) - 获取指定字符对应的编码

注意: 字符是长度为1的字符串

print(ord('贾'),ord('雪'),ord('静'))
print(hex(ord('贾')))

**3. 编码字符: ** \u四位的十六进制数

  • 程序中给字符串提供字符的时候有两种方式:

    • a.直接提供符号本身

    • b.通过字符对应的编码字符来提供(\u字符的十六进制编码值)

    str1 = 'a贾'
    str2 = '\u0061\u8d3e'
    print(str1,str2)
    

编码字符的使用场景∶知道字符编码值,但是不知道字符的情况下,想要在字符串中提供这样一个字符

print('在Unicode编码表中最后一个汉字:','\u9fa5')

三、字符串基本操作

1.查 - 获取字符串中的字符

字符串获取字符的语法和列表获取元素的语法一样

1. 获取单个元素

str1 = 'good good study!day day up!'
print(str1[3],str1[-2])

注意:转义字符的功能是什么,在计算字符串长度的时候,一个转义字符的长度是1

str2 = '\tadb\n123\u4e00m'
print(len(str2))
print(str2[1],str2[-3])

2. 切片

message ='小明的电话号码是:10086113893'
print(message[-11:])        # 10086113893
print(message[3:-2:-2])     # ''
print(message[1:-1:2])      # 明电号是10618

3. 遍历

str3 = 'hello Python'
for i in str3:
    print(i)


for i in range(len(str3)):
    print(i,str3[i])


for index,item in enumerate(str3):
    print(index,item)

2. 数学运算: +、 *

1. 字符串 + 字符串2 - 将两个字符串合并产生一个新的字符串(字符串拼接)

str1 = 'hello'
str2 = 'world!'
str3 = str1 + ' ' + str2
print(str3)

2. 字符串 * N

str4 = str3 * 3
print(str4)

str1 = 'abc12MK89你好9'
new_str = ''
for i in str1:
    if '0' <= i <= '9':
        new_str += i
print(new_str)

练习:将字符串中所有的数字字符都替换成*
‘ab2Mk89你好8’ -> ‘ab*Mk**你好*

str2 = 'ab2Mk89你好8'
str3 = ''
for i in str2:
    if '0' <= i <= '9':
        i = '*'
        str3 += i
    else:
        str3 += i
print(str3)

3.比较运算: >、<、>=、<=、==、!=

  1. **判断相等:**两个一模一样的字母才相等
print('abc' == 'acb')
  1. **比较大小:**两个字符串比较大小,比较的是第一对不相等的字符编码值的大小

已知字符x:

判断类型 方法
判断x是否是数学字符 ‘0’ <= x <= ‘9’
判断x是否是小写字母 ‘a’ <= x <= ‘z’
判断x是否是大写字母 ‘A’ <= x <= ‘Z’
判断x是否是字母 ‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断x是否是中文 ‘\u4e00’ <= x <= ‘\u9fa5’
print('CSDYOM' > 'cdvq')		# False

练习:统计字符串中中文和大写字母的数量

str1 = 'shfa换手机223--=2MjshUj行HSJSA'
count1 = 0
count2 = 0
for i in str1:
    if '\u4e00' <= i <= '\u9fa5':
        count1 += 1
    elif 'A' <= i <= 'Z':
        count2 += 1
print('中文数:',count1,'大写字母数:',count2)

4.in 和 not in

1.**字符串1 in 字符串2 ** - 判断字符串1是否是字符串2的子串(判断字符串2是否包含字符串1)

print(10 in [10,20,30])             # True
print([10,20] in [10,20,30])        # False

print('a' in 'abc123')              # True
print('abc' in 'abc123')            # True
print('ab1' in 'abc123')            # False

5. str(数据) - 将指定数据转换为字符串

所有类型数据都可以转换成字符串,转换的时候是在数据的打印值外面加引号(打印之后的值加引号)

print(100)
str(100)        # '100'

list1 = [10,20,30]
print(list1)        # [10, 20, 30]
str(list1)          #'[10, 20, 30]'

四、字符串相关方法

样式: 字符串.xxx()

1. 必须掌握的字符串相关方法

  1. join
方法 说明
字符串.join(序列) 用指定字符串将序列中的元素拼接成字符串(序列中的元素必须是字符串才可以)
reslut = '123'.join(['name', 'age', 'gender'])
print(reslut)       # name123age123gender

reslut = '=='.join('abc')
print(reslut)           # a==b==c

nums = [10, 20, 30, 40]
reslut = '+'.join([str(i) for i in nums])
print(reslut)           # 10+20+30+40


list1 = [10, 'abc', '你好', 1.23, True, '手机壳']
# 'abc你好手机壳'
reslut = ''.join([i for i in list1 if type(i) == str])
print(reslut)

练习: 将列表中每个元素的第一个字符提取出来形成一个新的字符串

list1 = ['name', 'age', 'gender']
reslut = ''.join(x[0] for x in list1)
print(reslut)
  1. split
方法 说明
字符串1.split(字符串2) 将字符串1中所有的字符串2作为切割点,对字符串1进行切割
字符串1.split(字符串2,N) 将字符串1中前N个字符串2作为切割点,对字符串1进行切割
str1 = '123abc你好abc===abc+++'
reslut = str1.split('abc')
print(reslut)           # ['123', '你好', '===', '+++']

reslut = str1.split('a')
print(reslut)           # ['123', 'bc你好', 'bc===', 'bc+++']

reslut = str1.split('abc',2)
print(reslut)           # ['123', '你好', '===abc+++']

str1 = 'abc123abcabc你好abc===abc+++abc'
reslut = str1.split('abc')
print(reslut)           # ['', '123', '', '你好', '===', '+++', '']

注意:如果切割点连续出现,或者切割点出现在字符串开头或者结尾,切割点的结果中会出现空字符串

  1. 替换replace
方法 说明
符串1.replace(字符串2,字符串3) 将字符串1中的所有的字符串2替换成字符串3
符串1.replace(字符串2,字符串3,N) 将字符串1中前N个字符串2替换成字符串3
messagae = 'how are you? i am fine! thank you! and you?'
reslut = messagae.replace('you', 'me')
print(reslut)           # how are me? i am fine! thank me! and me?

reslut = messagae.replace('you', 'me',1)
print(reslut)           # how are me? i am fine! thank you! and you?

reslut = messagae.replace(' ', '')
print(reslut)           # howareyou?iamfine!thankyou!andyou?
  1. strip
方法 说明
字符串.strip() 删除字符串前后两端的空白字符
字符串.strip(字符集) 删除字符串前后两端的指定的所有字符
str1 = '''      你 好, 世界         '''
reslut = str1.strip()
print(str1)
print(reslut)

str2 = '///重/庆'
reslut = str2.strip('/+')
print(reslut)           # 重/庆
  1. find、 index
方法 说明
字符串1.find(字符串2) 获取字符串2第一次出现在字符串1中的位置
字符串1.index(字符串2) 获取字符串2第一次出现在字符串1中的位置
messagae = 'how are you? i am fine! thank you! and you?'
print(messagae.find('you'),messagae.index('you'))       # 8 8

print(messagae.find('abc'))         # -1
# print(messagae.index('abc'))         # 报错: substring not found

他们区别在于: 当查找不存在的字符,find返回-1,index回报错

方法 说明
字符串1.find(字符串2,开始下标,结束下标) 在字符串1指定范围内查找字符串2第一次出现的位置,如果找不到返回-1
字符串1.index(字符串2,开始下标,结束下标) 在字符串1指定范围内查找字符串2第一次出现的位置,如果找不到报错
print(messagae.find('you', 0, 8))         # -1
print(messagae.find('you',11))         # 30
方法 说明
字符串1.rfind(字符串2) 从后往前找
字符串1.rndex(字符串2) 从后往前找
print(messagae.rfind('you'))        # 39

你可能感兴趣的:(数据分析,python,数据挖掘)