每天学点Python之strings
最后更新于:2022-04-01 16:23:10
# 每天学点Python之strings
在Python3中所有的字符编码都是Unicode,所以不用再担心编码问题了。
### 基本操作
在Python中字符串可以用单引号或者双引号中包含字符来表示,下面列一下最最基本的操作,分别是赋值、求长度、特定位置的字符和字符串连接:
~~~
In[5]: s = "hello world"
In[6]: len(s)
Out[6]: 11
In[7]: s[0]
Out[7]: 'h'
In[8]: s + '!'
Out[8]: 'hello world!'
~~~
如果字符串很长,要跨越多行,可以用三引号将内容包含进来:
~~~
In[32]: s = '''a
... b
... c
... '''
In[33]: s
Out[33]: 'a\nb\nc\n'
~~~
> 注:命令前的In/Out[n]只是表示第几条命令,没有实际意义
### 格式化
Python的字符串格式化非常简单,在需要插入值的地方用{n}表示,直接调用format()函数并传入相应的参数即可,注意下标是从0开始的,而且传入的参数必须大于等于需要的参数数目(多传入的会被忽略):
~~~
In[10]: s = 'my name is {0}, my age is {1}'
In[11]: s.format('drfish',20)
Out[11]: 'my name is drfish, my age is 20'
In[12]: s.format('drfish')
Traceback (most recent call last):
File "<ipython-input-12-305d7c657a14>", line 1, in <module>
s.format('drfish')
IndexError: tuple index out of range
In[13]: s.format('drfish',20,22)
Out[13]: 'my name is drfish, my age is 20'
~~~
如果参数非常多,用数字来表示容易产生混乱,可以使用别名表示:
~~~
In[28]: '{name} is {age}. '.format(name="drfish", age=22)
Out[28]: 'drfish is 22. '
~~~
再来看复杂一点的,输如的参数不仅仅是简单的值替换,而能在字符串中对其进行后续处理,如传入一个字典,可以对其取某个键的值,同理还可以使用一些复杂的对象的方法属性:
~~~
In[22]: s = 'my name is {0[name]}, my age is {0[age]}'
In[23]: s.format({"name":"drfish","age":20})
Out[23]: 'my name is drfish, my age is 20'
~~~
此外还能对输出的格式进行规定:
~~~
# 保留小数点后4位
In[26]: '{0:.4} is a decimal. '.format(1/3)
Out[26]: '0.3333 is a decimal. '
# 用'_'补齐字符串
In[27]: '{0:_^11} is a 11 length. '.format("drfish")
Out[27]: '__drfish___ is a 11 length. '
# 指定宽度
In[30]: 'My name is {0:8}.'.format('drfish')
Out[30]: 'My name is drfish .'
~~~
### 常用方法
**大小写**
字符串可以直接进行大小写的判断与转换:
~~~
In[34]: 'hello'.upper()
Out[34]: 'HELLO'
In[35]: 'Hello'.lower()
Out[35]: 'hello'
In[36]: 'Hello'.isupper()
Out[36]: False
~~~
**分割**
分割函数str.split()可以接收两个参数,一个是分割符,另一个是进行分割的数目:
~~~
In[37]: 'a=1,b=2,c=3'.split('=',2)
Out[37]: ['a', '1,b', '2,c=3']
~~~
**计数**
统计一个字符串中的某字符串的数目:
~~~
In[38]: "ab c ab".count("ab")
Out[38]: 2
~~~
**截取**
截取操作与列表相同:
~~~
In[39]: "hello world"[3:8]
Out[39]: 'lo wo'
~~~