字符串操作/for循环
1. 字符串操作
- 关于字符串
字符串为可迭代对象,即可视为一个列表。如字符串"abcd"可视为四个元素的列表[a,b,c,d]。
In [38]:str1='qwerty'
#取第四个字符
...:str1[3]
Out[38]: 'r'
单行字符串用 ‘str’ 和 “str” 表示,多行字符串用’’’ str’’'表示。演示如下:
In [36]:str1='hhhh'
...:str1
Out[36]: 'hhhh'
In [37]:str3='''风路半途归何处
...:叶落青山人落土'''
...:str3
Out[37]: '风路半途归何处\n叶落青山人落土'
# \n为换行符
- 拼接
各符号含义如下:
符号 | 含义 |
str1 + str2 | 将 str1 和 str2 连接起来 |
str*n | 将 n个 str 连接 |
str=’'str2".join(str1) | 在 str1的每个字符间插入str2 |
演示如下:
str1="We will have"
str2="perfect"
str00=" "
str3="GMV"
str01=str2+str00
#打印连接结果
print(u'Out[26]: str01= %s' % str01)
str03=(str2+str00)*3
#打印连接后复制结果
print(u'Out[27]: str03= %s' % str03)
strall=str1+" "+(str2+str00)*3+str3
#打印目标结果
print(u'Out[28]: strall= %s' % strall)
#join示例
print(u'Out[29]: strjoin= %s' % str00.join(str2))
#结果展示
Out[26]: str01= perfect
Out[27]: str03= perfect perfect perfect
Out[28]: strall= We will have perfect perfect perfect GMV
Out[29]: strjoin= p e r f e c t
- .切割与删除
- 单分隔符切割
当使用单分隔符切割时,字符串自带的方法 split( ) 定义如下表。切割后的结果为一个列表。
函数 | 参数 |
split(sep,maxsplit) | 从左分割。sep:分隔符;maxsplit:从左开始分割的次数 |
rsplit(sep,maxsplit) | 从右分割。sep:分隔符;maxsplit:从右开始分割的次数 |
示例:将str1按中文逗号切割,结果为一个三个元素的列表。
In[31]:str1="寂山幽谷风轻渡,芋薯植田待云乌。虽未见山泉涌,但知雨落归何处。"
...:str1.split(',')
Out[31]: ['寂山幽谷风轻渡', '芋薯植田待云乌。虽未见山泉涌', '但知雨落归何处。']
- 多分隔符切割
利用多分隔符分割时,可使用 re 模块中的split函数。以下程序可以将一个长文本转化为短句。
In [73]: str1="寂山幽谷风轻渡,芋薯植田待云乌。虽未见山泉涌,但知雨落归何处。"
...: import re
...: str1=re.split('。|,',str1)
#得到一个含五个元素的列表,因最后一个句号后无内容,第五个元素str1[4]为''
...: str1
#删掉空值str1[4]
...: del str1[4]
#得到四元素列表,每个元素为一个短句。
...: str1
Out[73]: ['寂山幽谷风轻渡', '芋薯植田待云乌', '虽未见山泉涌', '但知雨落归何处']
re 函数split(sep, str )参数如下:
符号与参数 | 含义 |
sep | 分隔符,多个分隔符可用竖线隔开 |
str | 待分割的字符串 |
- 按行分割
若按行分割,可直接使用 str 自带的方法 splitlines()
In [51]: str3='''风路半途归何处
...: 叶落青山人落土'''
...: str3
...: str3.splitlines()
Out[51]: ['风路半途归何处', '叶落青山人落土']
或者:
In [52]: str3.split('\n')
Out[52]: ['风路半途归何处', '叶落青山人落土']
- 删除
可使用 str 自带的方法 strip( )。默认值为删掉空白符(即’\n’,’\t’,’ '等),也可自定义删除的字符。
#原字符串
In [54]: str1=" ----$$$$ We ordered a full table of food for our dinner+++$$$---- "
#去掉空格
...: str1.strip( )
Out[54]: '----$$$$ We ordered a full table of food for our dinner+++$$$----'
#去掉无关字符
In [55]: str1.strip(' ').strip('-').strip('$').strip('+').strip(' ')
Out[55]: 'We ordered a full table of food for our dinner'
- 替换
可使用 str 自带的方法 replace(str1,str2 )。str1为字符串中希望被替换的字符,str2为替换字符。(即将原字符串中的str1替换为str2)。
In [64]: str1=" ----$$$$ We ordered a full table of food for our dinner+++$$$---- "
...: str1=str1.strip(' ').strip('-').strip('$').strip('+').strip(' ')
...: str1.replace('We','They').replace('food','shit').replace('our','their')
Out[64]: 'They ordered a full table of shit for their dinner'
2. For循环
定义格式如下。代码表示对于每一个range(第一层循环的索引范围)里的index(第一层循环的索引)先执行term,并对这个index下range2(第二层循环索引范围)中的每一个index2(第二层循环的索引)执行term2。其中用缩进表示循环层级,定义for循环时要在首句句尾加冒号":"。
for [index] in [range]:
[term]
for [index2] in [range2]:
[term2]
举例1:如下代码可将一个dataframe里的内容追加到一个list中。
In [68]: import pandas as pd
...: import numpy as np
#空列表
...: a=[]
#三行三列的随机数组成的DataFrame
...: b=pd.DataFrame(np.random.randn(3,3))
#对于每一行
...: for i in b.index:
#对于每一列
...: for j in range(0,3):
#追加到列表,loc[i][j]表示第i行j列
...: a.append(b.loc[i][j])
...:
...: print('This is the full list')
...: print(a)
...: print('this is the original dataframe')
...: print(b)
#结果展示:
This is the full list
[0.8033786735002058, 0.10823419368089689, 1.1150495113488599, -0.2617825326267717, -0.8671800171766091, -1.3948295222778422, -0.3980521040261222, 1.3375154240107507, 1.2152120818025256]
this is the original dataframe
0 1 2
0 0.803379 0.108234 1.115050
1 -0.261783 -0.867180 -1.394830
2 -0.398052 1.337515 1.215212
变量视图的结果如下:
举例2:表白神器(for+字符串操作)
str1="离开傻儿子的第"
str2="天"
str3="想他"
for i in range(0,10):
str0=str1+str(i)+str2+','+str3*i
print(str0)
编译视图的结果如下:
下期预告:条件语句