00.数字与字符串

数字

import pandas as pd
# 字符串拼接
name = 'a'
sex = 'nan'
name+sex
'anan'
import operator
operator.concat(name,sex)
'anan'
# 求平方根
import math
math.sqrt(4)
2.0
math.sqrt(9)
3.0
# 平方根可以通过几次幂表示
4**0.5
2.0
# 立方根
8**(1/3)
2.0
pow(8,1/3)
2.0
# 自然数常量
math.e
2.718281828459045
# π 
math.pi
3.141592653589793

字符串

# 打出 反斜杠 \     .使用 反斜杠 转义
print('\\')
\
# \n  换行
print('a\nb')
a
b

进制转换

# 十进制 转 8进制
print( '%o'%(8))
10
print( '%o'%(12))
14
# 十进制 转 16进制
print('%x'%(10))
print('%x'%(15))
print('%x'%(16))
a
f
10

数学函数

bin(x) 将x转为2进制
oct(x) 将x转为8进制
hex(x) 将x转为16进制
返回的结果 ,前两位表示几进制,后面是结果

怎么转回十进制
int(‘100’, 2)
int(‘10’, 8)
int(‘22’, 16)

print( bin(4) )
print( oct(12) )
print( hex(16) )
0b100
0o14
0x10
a = 101010
print( int( str(a) ,2 ) )
42
print( int('0b101010',2 ) )
42
int('10', 8)
8
int('22', 16)
34
int('17', 8)
15
int('112', 8)
74
int('132',16)
306
# 科学计数法  %e
print('%e'%5)
5.000000e+00
print('%e'%500)
5.000000e+02
print('%e'%12345678)
1.234568e+07
print('%e'% -500)
-5.000000e+02
print('%e'%0.00005)
5.000000e-05
print(1e3-500)
500.0
print(1e+4-500)
9500.0

常用函数

# 1.  返回字符串的首字母大写
'hello'.capitalize()
'Hello'
# 2. str.center(width ,'符号' )返回 str ,占据 width 宽度 ,
'jack'.center(30)
'             jack             '
print('jack'.center(30 ,'-'))
print('rose'.center(30 ,'-'))
print('you jump,I jump'.center(30 ,'-'))
-------------jack-------------
-------------rose-------------
-------you jump,I jump--------
# 左对齐  str.ljust()
# 右对齐  str.rjust()
# 3. string.count(str ,start=0 ,end=len(string))
str3 = '哄嘛咪嘛哄哄嘛咪嘛哄哄嘛咪嘛哄'
str3.count('哄')
6
str3.count('哄',1,-2)
4
# 4. string.startswith(str , start ,end )
#   检查 string[start:end] 是否以  str 开头
# 如检测姓什么
​
s2 = pd.Series(['张三','李四','王五'])
s2
0    张三
1    李四
2    王五
dtype: object
'张三'.startswith('张')
True
'张三'[0]=='张'
True
s2.apply(lambda x:x.startswith('张') )
0     True
1    False
2    False
dtype: bool
s2[s2.apply(lambda x:x.startswith('张') )]
0    张三
dtype: object
# 或者 使用 
s2.apply(lambda x:x[0]=='张' )
0     True
1    False
2    False
dtype: bool
s2.str.startswith('李')
0    False
1     True
2    False
dtype: bool
s3 = pd.Series(['  张三 ','  %李四','王五#'])
s3
0      张三 
1      %李四
2      王五#
dtype: object
s3.str.strip().str.strip('%').str.strip('#')
0    张三
1    李四
2    王五
dtype: object
# 5. string.endswith( str ,start,end ) string 检查某个区间内是否以 str 结尾
# 6. string.find( str ,start,end )  查找 string 的 start-end范围内 str 在整体的索引位
# 找不到返回 -1
str6 = '大吉大利,今晚吃鸡'
str6.find('大')
0
str6.find('大',1)
2
str6.find('明晚')
-1
# 假设一个长字符 
mimi = 'ljflasdkjfe@13888888888@kejlsadjf'
# 取出  @ @ 中的号码
start1 = mimi.find('@')
start1
11
start2 = mimi.find('@',start1+1)
start2
23
mimi[start1+1:start2]
'13888888888'
# 7.string.rfind( str ,start,end ) 从右往左查找 string 的 start-end范围内 str 在整体的索引位
str7  = 'a1234a'
str7.rfind('a')
5
str7.rfind('b')
-1
# 8. string.index(str,start,end) 同 find .但是找不到会报错
str7.index('a')
0
#  9. string.isalnum()  判断 string 是否有 纯数字字母(包含汉字)组成
'abc123'.isalnum()
True
'abc123哈哈哈'.isalnum()
True
'abc123-'.isalnum()
False
# 10. string.join(seq)  seq:可以是list 。 以string为连接符,把seq中的元素连起来得到str
str10 = '天地玄黄'
'*'.join(str10)
'天*地*玄*黄'
'-'.join( ('2020','8','17')  )
'2020-8-17'
# max()
max('abcxyzABCXYZ')
'z'
min('abcxyzABCXYZ')
'A'
#  11. string.replace(old ,new ,n)  将string中的old替换成new,n次。默认替换所有
'abc-abc-abc'.replace('a','A')
'Abc-Abc-Abc'
'abc-abc-abc'.replace('a','HAHA',1)
'HAHAbc-abc-abc'
# 12. string.split(str='' ,num= string.count(str))   将string 以 str的分割,返回 list
#  默认分割 num 次 。也就是默认分割所有
str12 = '张三-|-李四-|-王五-|-赵六'
str12.split('-|-')
['张三', '李四', '王五', '赵六']
str12.split('-|-',1)
['张三', '李四-|-王五-|-赵六']
# 13. 'abc123'.translate( table )  根据table对象去翻译 每个字符
# 准备table 对象
intable = 'abc1'
outtable = 'ABCy'
table = str.maketrans(intable,outtable)
'abcd-abc1-123'.translate(table)
'ABCd-ABCy-y23'
# 可以使用多次 replace
'abcd-abc1-123'.replace('a','A').replace('b','B').replace('c','C').replace('1','y')
'ABCd-ABCy-y23'

正则

import re
# 假设 有个数据  需要将字母以符号分割成list
str1 = 'a,b.c!d;;;;ffe/gg,%h'
# 准备特殊转换table
intable2 = ',.!;/%'
outtable2 = ',,,,,,'
table2 = str.maketrans(intable2,outtable2)
# 进行转换为 ,
str1.translate(table2)
'a,b,c,d,,,,ffe,gg,,h'
# 分割
str1.translate(table2).split(',')
['a', 'b', 'c', 'd', '', '', '', 'ffe', 'gg', '', 'h']
# 推导式过滤 空 值
[each for each in str1.translate(table2).split(',') if bool(each)]
['a', 'b', 'c', 'd', 'ffe', 'gg', 'h']

使用正则处理

str1
'a,b.c!d;;;;ffe/gg,%h'
# 构建正则表达式
reg = re.compile('[a-zA-Z]+')
re.findall(reg,str1)
['a', 'b', 'c', 'd', 'ffe', 'gg', 'h']

正则含义 ‘abc’ 连续的三个字符abc
[abc123] abc123中的一个
[a-z] a-z中的一个
[A-Y] A-Y中的一个
[0-9] 0-9中的一个
[a-zA-Z0-9] a-zA-Z0-9 一个

元字符
. 就是一个 点.
. 任意一个字符
\w 任意一个 字母数字下划线,在python还是一个中文
\W 不是任意一个 字母数字下划线,在python还是一个中文
\s 一个空白
\S 非空白
\d 一个数字
\D 不是一个数字

量词
{1,4} 出现1-4次
{1,} 一次以上

// + 一次以上
{0,} 任意次

// * 任意次
{0,1} 0或1次,有或者无
? 0或1次,有或者无
(abc|\d{5}|\w+) 竖线隔开的 三个东西中的一个

str1
'a,b.c!d;;;;ffe/gg,%h'
reg2 = re.compile('\W+')
re.split(reg2,str1)
['a', 'b', 'c', 'd', 'ffe', 'gg', 'h']

# 正则替换
re.sub(reg2,',',str1)
'a,b,c,d,ffe,gg,h'

你可能感兴趣的:(字符串,正则表达式)