Python数据类型一数字和字符串

2017-11-14  本文已影响0人  断尾壁虎V

数据类型

使用交互界面可以直接赋值:

>>> a=10
>>> id(a)
9178176
>>> type(a)
<class 'int'>
>>> a
10

使用id()type() 函数可以查看变量的值在内存中的ID号和数据类型,同理,可以使用此种方式来查看字符串,列表,字典等。
通过使用' '," ",或''' '''的方式可以表示字符串类型。

>>> a='123'
>>> id(a)
140528106920736
>>> type(a)
<class 'str'>
>>> a
'123'

其中,列表和字典的值是可变的,其他类型值是不可变的(这里的可变和不可变指的是内存中映射的相同id下的值)

可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典
不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)

变量的定义规范:

在python2和python3中,使用input()数据的输入
会有区别:
python2:

>>> t=input('input:')
input:123
>>> type(t)
<type 'int'>

python3:

>>> t=input('input:')
input:123
>>> type(t)
<class 'str'>

python2中输入的数据格式会自动存储为对应的格式,而python3中无论输入的是什么格式,最终都会是字符串的格式。python2中的raw_input()函数和python3中的input()函数是有相同的功能:
python2:

>>> t=raw_input(":")
:123
>>> type(t)
<type 'str'>
数据类型的转换

对于数据的转换可以使用str()函数或者int(),但是要将str类型转换为list类型,可以使用eval():

>>> t=input('input:')
input:[1,2,3]
>>> type(t)
<class 'str'>
>>> l=eval(t)
>>> l
[1, 2, 3]
>>> type(l)
<class 'list'>

eval()函数可以将字符串等内容转换为一条可以执行的命令,类似于shell中的|bash 命令。
需要注意的是,在python2中,使用input(),输入没有定义的变量名会报名称没有定义的错误,如果是字符串,需要带引号:

>>> input(':')
:x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'x' is not defined
>>> input(':')
:'X'
'X'
变量赋值

python支持链式赋值:

>>> a=b=c=d=10
>>> a,b,c,d
(10, 10, 10, 10)
>>> a
10

交换值python非常灵活:

>>> x=1
>>> y=2
>>> x,y=y,x
>>> x
2
>>> y
1
格式化输出

使用%s%d 可以表示字符串和数字,在格式化输出的时候可以带入:

 >>> print('this is python %d' %3)
this is python 3
>>> print('this is %s %d' %('python',3))
this is python 3
数字

python3在定义数字的时候会默认给出数字的类型(int或 float,complex),与python2不同的是python3中取消了长整型。

>>> a=10         # 系统自动添加了类型相当于 a=int(10)
>>> type(a)
<type 'int'>
>>> b=10.0       # 系统自动添加了类型相当于 a=float(10.0)
>>> type(b)   
<type 'float'>
>>> c=1-2j       # 复数
>>> type(c)
<type 'complex'>

数字进制转换:

>>> a=10             # 10进制数
>>> print(bin(a))
0b1010               # 转换为二进制 1010
>>> print(oct(a))
012                  # 转换为八进制 12
>>> print(hex(a))
0xa                  # 转换为十六进制 a
字符串处理

索引 定义字符串使用单引号,双引号或者三引号表示。python中没有定义字符的机制,如果取单个字符串的字符,可以使用序列的方式表示:

>>> a='abcdef'
>>> print(a)
abcdef
>>> print(a[0])
a
>>> print(a[1])
b

strip() 对于字符中多余符号的处理,可以使用strip()函数,默认是去掉空格:

>>> a=input('a:')
a:    abc
>>> a
'    abc'
>>> a.strip()
'abc'

去除多余的字符,可使用strip()函数:

>>> a=input('a:')
a:#####abc#####
>>> a.strip('#')
'abc'
>>> a=input('a:')
a:###***abc***&&&
>>> a.strip('#*&')
'abc'

当然,也可以只去除一边的字符:

>>> a.lstrip('#*&')
'abc***&&&'
>>> a.rstrip('#*&')
'###***abc'

split() 字符串切分,默认使用空格:

>>> name='root:x:0:0:root:/root:/bin/bash'
>>> print(name.split(':'))
['root', 'x', '0', '0', 'root', '/root', '/bin/bash']
>>> print(name.split(':')[5])
/root

指定切分的次数:

>>> print(name.split(':',1))
['root', 'x:0:0:root:/root:/bin/bash']
>>> print(name.split(':',1)[0])
root

多个空格合并为一个:

>>> name='welcom    to  new     home'
>>> name
'welcom    to  new     home'
>>> name.split()
['welcom', 'to', 'new', 'home']
>>> print(name.split())
['welcom', 'to', 'new', 'home']

切片 第一个数字为起始位(以0开始),第二个数字为结束位(不包含结束位),第三个数字为步长(取值间隔):

>>> name='abcdefgh'
>>> name[2]
'c'
>>> name[2:4]
'cd'
>>> name[2:6:2]
'ce'

len() 字符长度:

>>> name='abc'
>>> name.__len__()
3
>>> len(name)
3

startswith() 与 endswith() 判断是否以某个字符串开始或者结尾:

>>> a='hello world'
>>> a.startswith('he')
True
>>> a.endswith('old')
False
>>> a.endswith('rld')
True

replace() 字符替换,第一个字符表示要替换的字符,第二个表示新的字符,第三个数字表示替换的个数:

>>> a='hello world'
>>> a.replace('l','x',2)
'hexxo world'
>>> a.replace('l','x',3)
'hexxo worxd'

format() 格式化匹配,任意顺序也可格式化字符表示:

>>> '{} {} {}'.format('a','b',3)
'a b 3'
>>> '{0} {1} {0}'.format('a','b',3)
'a b a'
>>> '{name} {sex} {age}'.format(name='a',sex='b',age=3)
'a b 3'
>>> 'NAME:{name} SEX:{sex} AGE:{age}'.format(name='a',sex='b',age=3)
'NAME:a SEX:b AGE:3'
>>> 'NAME:{name} SEX:{sex} AGE:{age}'.format(age=3,name='a',sex='b')
'NAME:a SEX:b AGE:3'

isdigit() 判断输入的字符串是否是数字:

>>> num='123'
>>> num.isdigit()
True

find()和 rfind() 查找字符所在的索引位置,找不到时返回-1,rfind()表示从右向左查找:

>>> a='hello world'
>>> a.find('3')
-1
>>> a.find('o')
4
>>> a.find('o',4,8)
4
>>> a.find('o',5,8)
7
>>> a.rfind('o',4,8)
7

index()和rindex() 显示字符所在的下标索引,数字表示指定的索引范围,字符不存在会报错,rindex()表示从右向左查找:

>>> a='hello world'
>>> a.index('o')
4
>>> a.rindex('o')
7
>>> a.index('o',4,8)
4
>>> a.index('3')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

count() 统计字符的个数,数字表示索引范围:

>>> a='hello world'
>>> a.count('o')
2
>>> a.count('o',5,8)
1

join() 表示拼接字符串:

>>> name
['welcom', 'to', 'new', 'home']
>>> ' '.join(name)
'welcom to new home'
>>> ':'.join(name)
'welcom:to:new:home'
>>> name='welcom    to  new     home'
>>> name.split()
['welcom', 'to', 'new', 'home']
>>> ' '.join(name.split())
'welcom to new home'

center(),ljust(),rjust(),zfull() 字符填充:

>>> a='hello'
>>> a.center(30,'*')
'************hello*************'
>>> a.rjust(30,'*')
'*************************hello'
>>> a.ljust(30,'*')
'hello*************************'
>>> a.ljust(30)
'hello                         '
>>> a.zfill(30)
'0000000000000000000000000hello'

expandtabs() 指定tab键的空格数目:

>>> name='hello\tworld'
>>> print(name)
hello   world
>>> print(name.expandtabs(1))
hello world

字母大小写转换:

>>> name='hello world'
>>> name.upper()         # 全部大写
'HELLO WORLD'
>>> name.capitalize()     # 第一个单词首字母大写
'Hello world'
>>> name.swapcase()      # 大小写反转
'HELLO WORLD'
>>> name.title()        # 每个单词首字母大写
'Hello World'
>>> name='HELLO'     
>>> name.lower()      # 全部小写
'hello'

判断字符串的组成:

>>> name='hello'
>>> name.isalnum()    # 判断由字符串或数字组成
True
>>> name.isalpha()
True
>>> name='hello123'
>>> name.isalpha()      # 判断只有字母组成
False
>>> name.isalnum()
True
>>> name='123'
>>> name.isalnum()
True
>>> name='hello123###'
>>> name.isalnum()
False

判断是否为数字,多中不同的判断方式可以判断不同的数字类型, 在无特殊情况下,对数字的判断使用isdigit()即可:

>>> n1=b'5'     # Bytes 型数字
>>> n2=u'5'     # unicode, python3中默认使用此种类型数字
>>> n3='四'     # 中文数字
>>> n4='Ⅴ'     # 罗马数字
>>> n1.isdigit()
True
>>> n2.isdigit()
True
>>> n3.isdigit()
False
>>> n4.isdigit()
False

>>> n1.isnumeric()      # Bytes 类型无此方法
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'isnumeric'
>>> n2.isnumeric()
True
>>> n3.isnumeric()
True
>>> n4.isnumeric()
True

>>> n1.isdecimal()      # Bytes 类型无此方法
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'isdecimal'
>>> n2.isdecimal()
True
>>> n3.isdecimal()
False
>>> n4.isdecimal()
False
上一篇下一篇

猜你喜欢

热点阅读