python学习 --- 数据类型
python内建数据类型
| 分类 | python类型 |
|---|---|
| Text Type | str |
| Numeric Types | int, float, complex |
| Sequence Types | list, tuple, range |
| Mapping Type | dict |
| Set Types | set, frozenset |
| Boolean Type | bool |
| Binary Types | bytes, bytearray, memoryview |
布尔类型
True/False
print(bool("")) #False
print(bool(0)) #False
数字(Number)类型
python中数字有四种类型:整数、布尔型、浮点数和复数。
- int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
- bool (布尔), 如 True。
- float (浮点数), 如 1.23、3E-2
- complex (复数), 如 1 + 2j、 1.1 + 2.2j
字符串
python字符串可以简单的理解为一个不可变的字符数组,因此它也支持大部分的数组操作:如截取,in/not in判断,以及加号和乘号运算符等
表示
- python中单引号和双引号使用完全相同,使用三引号可以指定一个多行字符串。
- 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
print( r'\n' )
print( R'\n' )
转义
>>> print("\110\145\154\154\157\40\127\157\162\154\144\41")
Hello World!
>>> print("\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21")
Hello World!
截取
截取遵循“左开右闭”原则
var1 = 'Hello World!'
var2 = "Runoob"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5])
格式化
C sprintf形式
%[(name)][flags][width].[precision] typecode
(name):即变量的名称,当使用这种形式时,%后面的参数根据名字而不是位置来匹配,因此需要是dictionary类型,而不再是元组
flags:可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示左侧使用0填充。
width:表示显示的最小宽度
precision:表示小数点后精度
typecode:
| typecode | 说明 |
|---|---|
| %s | 格式化字符串 |
| %d | 格式化整数 |
| %f | 格式化浮点数 |
| %e | 用科学计数法格式化浮点数 |
name="james"
number=35.569
print('Hey %(name)s, there is a %(num)+5.2f number!' % {"name": name, "num": number})
print('Hey %s, there is a %+5.2f number!' % (name,number))
#Hey james, there is a +35.57 number!
format()方法
大括号表示要替换的位置,如果大括号中的内容为数字表示按位置匹配,如果是字符串则表示按变量名匹配。
格式规则:参数序号或参数名:<填充><对齐><宽度><,><.精度><类型>
- 填充:默认采用空格
- 对齐:分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐
- 宽度:输出字符最小宽度
- ,:千位分隔符
- <.精度>:对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。
- <类型>:b-二进制,c-Unicode字符,d-十进制,o-八进制,x-十六进制,X-十六进制(大写),e/E-浮点科学计数形式,f-浮点,%-浮点百分数形式
# 格式化,format方法
print("Hey {}, there is a {} number!".format(name, number))
print("Hey {0}, there is a {1} number!".format(name, number))
print("Hey {name}, there is a {number} number!".format(**{"name": name, "number": number}))
print("Hey {0}, there is a {1:0>8,.2f} number!".format(name, number))
print("Hey {name}, there is a {number:0>8,.2f} number!".format(**{"name": name, "number": number}))
#Hey james, there is a 1,035.57 number!
f-string:python3.6以后
格式仍遵循:<填充><对齐><宽度><,><.精度><类型>,但有所拓展。
- 对齐 align:"<" | ">" | "=" | "^"
- 符号 sign :这个仅仅对数值有效 "+" | "-" | " "
- 宽度 width:是一个整数数值,表示多少宽度
- 千位分隔符:表示千分位的分隔符号,可以是 "_" | ","
- 精度 precision : .数字
- 类型 type:"b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
print(f'Hey {name}, there is a {number:0>8,.2f} number!')
内建函数
大小写转换
hw = "hello, world!"
assert "Hello, world!" == hw.capitalize()
assert "Hello, World!" == hw.title()
assert "hello, world!" == hw.lower()
assert "HELLO, WORLD!" == hw.upper()
assert "HELLO, WORLD!" == hw.swapcase()
断言类函数:is*/startswith()/endswith()
- isalpha()/isalnum()/isdecimal()/isdigit()/isnumeric()/isidentifier()/isprintable()/isspace()
- istitle()/isupper()/islower()
python中str函数isdigit、isdecimal、isnumeric的区别
查找子串:count,find,index
- count():返回匹配的子串个数
- find()/rfind():返回第一个匹配成功的index,没匹配到返回-1;rfind()表示从右向左查找,下同
- index()/rindex():返回第一个匹配成功的index,没匹配抛出异常
translate()/maketrans()
这两个函数通常配合使用:maketrans生成translate用的字典,maketrans的前两个参数字符数必须相等,否则会报错;第三个参数可选,表示要删除的字符
txt = "Good night Sam!"
x = "mSa"
y = "eJo"
z = "odnght"
mytable = txt.maketrans(x, y, z)
print(mytable)
print(txt.translate(mytable))
#{109: 101, 83: 74, 97: 111, 111: None, 100: None, 110: None, 103: None, 104: None, 116: None}
# G i Joe!
replace(oldvalue, newvalue, count):替换子串
第三个参数可选,表示替换几次,默认替换所有
分割和分区:split(separator, maxsplit)/splitlines()/partition()
- split()/rsplit()是根据分隔符分割字符串,返回一个list。第一个参数是分隔符,默认为空格;第二个参数可选,表示最多做几次分割:1次切割分为2组,2次分为3组,以此类推
txt = "apple, banana, cherry"
x = txt.rsplit(", ", 1)
print(x)
#['apple, banana', 'cherry']
- splitlines(keeplinebreaks):是否保留换行符,可选参数,默认为False
- partition()/partition()则是分区,返回一个包含3个元素的元组,分别是分隔符前面的部分,分隔符自身和它后面的部分;如果分隔符不存在,则后两个元素为空串
txt = "I could eat bananas all day"
x = txt.partition("apples")
print(x)
#('I could eat ', 'bananas', ' all day')
拼接:join()
join(iterable):输入参数时一个可迭代类型,返回一个字符串
myTuple = ("John", "Peter", "Vicky")
x = "#".join(myTuple)
print(x) # John#Peter#Vicky
对齐和裁剪
- ljust()/rjust()/center():对齐,传入两个参数:第一个参数为长度,必填;第二个参数为填充的字符,选填,默认为空格
- lstrip()/rstrip()/strip():裁剪,传入字符串序列,默认为空格
str = "123abcrunoob321"
print (str.strip( '12' )) # 字符序列为 12
- zfill(width):返回指定长度的字符串,并在左边填充0
list
- list中的元素可以是不同的类型,也支持嵌套
- list是可变的
- list支持切片和负数索引
- list支持in/not in
- 使用+运算符可以合并两个列表
类型和长度
mylist = ["apple", "banana", "cherry"]
print(type(mylist)) # <class 'list'>
print(len(mylist)) # 3
修改元素
- 使用索引修改元素,当索引的位置超出范围时会抛出异常
- 可以使用range改变多个元素,原则也是前开后闭
thislist = ["apple", "banana", "cherry", "orange", "kiwi", "mango"]
thislist[1:3] = ["blackcurrant", "watermelon"]
print(thislist)
# ['apple', 'blackcurrant', 'watermelon', 'orange', 'kiwi', 'mango']
添加元素
- list.append(elmnt):在末尾添加元素
- list.insert(pos, elmnt):在指定位置插入元素
- list.extend(iterable):传入一个可迭代对象,把该对象的每个元素都加入列表末尾
thislist = ["apple", "banana", "cherry"]
tropical = "mango"
thislist.extend(tropical) #字符串会被认为是一个可迭代对象
print(thislist)
# ['apple', 'banana', 'cherry', 'm', 'a', 'n', 'g', 'o']
删除元素
- list.remove(obj):删除第一个obj匹配的元素
- list.pop([index=-1]):按索引移除元素,返回被删除的元素;默认的index为-1,即删除最后一个元素
- del:既可以删除整个list,也可以删除list中的某个元素;del整个list后,list的定义也不复存在
- list.clear():清空列表,list定义仍存在
thislist = ["apple", "banana", "cherry","pear"]
del thislist[2]
print(thislist)
thislist.remove('banana')
print(thislist)
thislist.pop()
print(thislist)
thislist.clear()
print(thislist)
del thislist
print(thislist) #此处会抛出异常,因为thislist的定义已经不复存在了
遍历列表
- for in
thislist = ["apple", "banana", "cherry"]
for x in thislist:
print(x)
- 使用index
thislist = ["apple", "banana", "cherry"]
for i in range(len(thislist)):
print(thislist[i])
- 使用while
thislist = ["apple", "banana", "cherry"]
i = 0
while i < len(thislist):
print(thislist[i])
i = i + 1
列表推导
使用列表推导可以快速生成新的列表
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
# ['apple', 'banana', 'mango']
排序
- sorted(iterable, key=key, reverse=True|False):返回一个新的排序后的列表
- list.sort(reverse=True|False, key=myFunc):对原列表进行排序,会改变原列表
倒序
- reversed(sequence)返回一个倒序的迭代器
- list.reversed()会对原数组进行倒序
alph = ["a", "b", "c", "d"]
ralph = reversed(alph)
print(list(ralph)) #['d', 'c', 'b', 'a']
print(alph) #['a', 'b', 'c', 'd']
alph.reverse()
print(alph) #['d', 'c', 'b', 'a']
复制
- 使用built-in的copy()方法
thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)
- 使用list()构造函数
thislist = ["apple", "banana", "cherry"]
mylist = list(thislist)
print(mylist)
查找
- count(value):返回value在列表中出现的次数
- index(value):返回value第一次在列表中匹配的index,若不存在则抛出异常
tuple
- tuple是一种特殊的不可变的列表,因此除了对元素进行增删改的操作,其他操作如切片等在tuple上都试用。
unpack:拆包
可以一次性给tuple中的多个变量赋值,并使用星号表示匹配其余的值
fruits = ("apple", "mango", "papaya", "pineapple", "cherry")
(green, *tropic, red) = fruits
print(green)
print(tropic) # ['mango', 'papaya', 'pineapple']
print(red)
dictionary
- dictionary也就是map,用于存储键值对,它是无序的并且不允许键重复
访问
- 使用方括号或get()访问字典
thisdict = { "brand": "Ford", "model": "Mustang", "year": 1964}
x = thisdict["model"]
- keys()/values()/items():返回字典中所有的键/值/键值对,返回的对象相当于字典的一个view,当字典中的元素发生变化时,它也会跟着变化
添加和修改元素
- 使用方括号修改
- update(iterable):可以一次更新多个值,也可以添加不存在的值
car = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
car.update({"color": "White","brand":"BMW","size":"large"})
print(car)
# {'brand': 'BMW', 'model': 'Mustang', 'year': 1964, 'color': 'White', 'size': 'large'}
删除
- pop(key):删除指定key的元素
- popitem():删除最后插入的元素(3.7以前为随机删除一个元素)
- del:删除整个字典或字典中的某个元素
- clear():清空字典,但字典的定义仍在
遍历
# 按key遍历
for x in thisdict:
print(x)
# 按键值对遍历
for x, y in thisdict.items():
print(x, y)
# 按值遍历
for x in thisdict.values():
print(x)
复制
和list类似,可以使用dict.copy()或内建函数dict()
其他方法
fromkeys(keys, value)
第二个参数可选
x = ('key1', 'key2', 'key3')
y = 0
thisdict = dict.fromkeys(x, y)
print(thisdict)
# {'key1': 0, 'key2': 0, 'key3': 0}
setdefault(keyname, value)
非常有用的简便操作,返回key对应的值:
- 如果key存在,则相当于get(),value不起作用
- 如果key不存在,则插入key和value
car = { "brand": "Ford", "model": "Mustang", "year": 1964}
x = car.setdefault("model", "Bronco")
print(x) #Mustang
set
- set可以理解为没有value的dictionary,它是无序的且不允许重复
- set中的元素可以是不同的类型
thisset = {"apple", "banana", "cherry", "apple"}
添加元素
- set.add(elmnt):添加单个元素
- set.update(iterable):批量添加元素
删除元素
- remove(elmnt)/discard(elmnt):元素不存在时,remove()会抛出异常,discard()则不会
- pop():随机删除一个元素
- clear():清空set
- del关键字:删除set变量
集合运算
并集
- set.union(set1, set2...):多个set的并集,返回一个全新的set
- set.update(iterable):update实际是计算两个集合的并集,结果体现在原set中
交集
- set.intersection(set1, set2 ... etc):计算多个set的交集,返回一个全新的set
- set.intersection_update(set1, set2 ... etc):计算多个set的交集,并把结果更新到原set中
- set.isdisjoint(set):当两个集合没有相同元素时,返回True
差集和symmetric difference
- 差集:使用减号来计算
- set.symmetric_difference(set)/set.symmetric_difference_update(set):保留两个集合中所有不同的元素
s1 = {"a", "b", "c", "d"}
s2 = {"c", "d", "e", "f"}
print(s1 - s2) #{'b', 'a'}
print(s1.symmetric_difference(s2)) #{'a', 'b', 'f', 'e'}
子集
- set.issuperset(set):判断集合是否为传入集合的超集
- set.issubset(set):判断集合是否为传入集合的子集

浙公网安备 33010602011771号