4.数值类型,集合-python3基础知识
数值类型
1. 整型:
十进制:a=4
或者类型转换int()
返回int类型,int(str,base)
将字符串转为指定进制的数
二进制:a=0b1011
类型转换bin()
返回str类型
八进制:a=0o17
类型转换oct()
返回str类型
十六进制:a=0x12a
类型转换hex()
返回str类型
2. 浮点型:float
3. 复数:complex
1+4j
或者 1+4J
也可以使用cmoplex(real,imag)
来创建
通过c.real
c.imag
来获取复数的实部跟虚部
数值复杂度整型<浮点型<复数,在不同类型的运算时,Python会默认转为最高复杂度的类型。
4.分数Fraction
通过 from fractions import Fraction
导入模块,
创建:x=Fraction(1,3)
>>>1/3
可以直接跟其他类型参与计算。
运算
除了基础的数学运算,还包括位运算,取整截断等
运算符 | 描述 |
---|---|
x and y | 逻辑与 |
x or y | 逻辑或 |
not x | 逻辑非 |
x if y else z | 三元表达式 |
x != y | 不等于 |
x | y | 按位或 |
x ^ y | 按位异或/不进位加法 |
x & y | 按位与 |
~x | 按位非 |
math.floor() | 向下取整 |
math.trunc() | 截断 ,只保留整数位 |
集合(set)
集合是无序的可变,但元素是唯一的不可变对象;支持集合论相关操作。
集合创建
直接创建:
x = {'a', 'b', 'c', 'd', 'e'}
>>>{'d', 'c', 'e', 'a', 'b'}
集合是无序的,所以输出结果并不会有序
通过set(Iterator):
字符串:
x=set('abcde')
>>>{'d', 'c', 'e', 'a', 'b'}
列表:
y=set([1,2,3,4,5])
>>>{1, 2, 3, 4, 5}
元组:
y=set((1,2,3,4,5))
>>>{1, 2, 3, 4, 5}
字典:只有key值
z=set(dict(a=1,b=2,c=3))
>>>{'a', 'c', 'b'}
同样的,集合可以像列表,字典一样,通过推导方法创建:
x={x**2 for x in [1,2,3,4,5]}
print(x)
>>>{1, 4, 9, 16, 25}
方法
集合论中的差并交补都可以实现
假设 x=set('abcde') y=set(('bcfgh'))
差X-Y:
x-y
>>>{'d', 'e', 'a'}
并X∪Y:
x|y
>>>{'g', 'f', 'd', 'e', 'a', 'c', 'b', 'h'}
交X∩Y:
x&y
>>>{'b', 'c'}
补∁Ux,设U=X∪Y:
u=x|y
u^x
>>> {'h', 'f', 'g'}
添加元素:
需要注意的是,集合只能包含不可变对象(可哈希的),所以,列表,字典,集合不能嵌套在集合中,否则会报错TypeError: unhashable type:'xxx'
,如果要添加复合对象,可以添加元组:
x.add(element)
或者x.add(tuple)
如果非要嵌套集合,可以通过frozenset(set)
创建一个不可变集合:
x=set('abcde')
print(id(x))
y=set(('bcfgh'))
x=frozenset(x)
print(id(x))
y.add(x)
print(y)
>>>1720969268808
1720969341640
{'h', frozenset({'a', 'b', 'e', 'c', 'd'}), 'g', 'b', 'f', 'c'}