快捷搜索:

Python3学习(二):基本数据类型

Python3 基本数据类型

  1. python中变量不需要声明,但是必须要赋值。
  2. 变量没有类型,我们通常说的类型是变量所指的内存中对象的类型。
test_int = 10
test_float = 3.14
test_str = "Hello"

a = b = c = 1
d,e,f = 5,1.23,"lol"

print(a,b,c,d,e,f)
  1. 可以使用type(ele)查看变量所指的对象类型
  2. 可以使用isinstance(ele,type)来判断类型
  3. isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系。 isinstance() 会认为子类是一种父类类型,考虑继承关系。 如果要判断两个类型是否相同推荐使用 isinstance()。
print(type(f))
print(isinstance(a,int))

Python3 的六个标准数据类型中:

  1. 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  2. 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
1.Number (int, float, bool, complex)
number_int = 1

#可以通过使用del语句删除单个或多个对象。例如:
del number_int,a,b,c,d,e,f
  1. 特殊运算符号 //(除法向下取整) **(乘方)
  2. 在混合计算时,Python会把整型转换成为浮点数。
  3. Python支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
a, b, c, d = 5, 3, 2, 1.3

print(a//b)
print(c**b)
print(a+d)

2.String
  1. 字符串用’或""包裹,用表示转义字符
  2. 反斜杠 转义特殊字符,如不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串
  3. 字符串的截取 -> 变量[头下标:尾下标] 索引值以 0 为开始值,-1 为从末尾的开始位置。(不包括尾下标)
  4. Python中的字符串不能改变!!!
print("Hello, world!
")
print(r"Hello, world!
")

3.List
  1. List列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
  2. List列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
  3. 列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表 -> 变量[头下标:尾下标:步长], 当步长为负数时,代表反向读取。
  4. 加号 + 是列表连接运算符,星号 * 是重复操作。
  5. 与Python字符串不一样的是,列表中的元素是可以改变的!!! 不可变(Number,String,Tuple) ,可变(List,Set,Dictionary)
list_test1 = [a,b,c,d]
list_test2 = [e,1,3.14,True]

print(list_test1[1:3])
print(list_test1+list_test2)

list_test1[0] = "change"
list_test1[1:4] = ["t1","t2","t3"]
print(list_test1)

List的一些内置方法

方法 描述 list.append(x) 添加到列表的结尾,相当于 a[len(a):] = [x] list.extend(L) 添加指定列表的所有元素来扩充列表,相当于 a[len(a):] = L list.insert(i, x) 指定位置插入一个元素,注意insert(0, x), insert(len(list), x) list.remove(x) 删除列表中值为 x 的第一个元素 list.pop([i]) 移除指定位置元素,无索引则移除最后一个 list.clear() 移除列表中所有项,等于del a[:] list.index(x) 返回第一个值为 x 的元素的索引 list.count(x) 返回 x 在出现的次数 list.sort() 对列表中的元素进行排序 ( 默认升序 ) list.reverse() 倒排列表中的元素 list.copy() 返回列表的浅复制,等于a[:]
    List列表可以通过append和pop方法模拟堆栈(LIFO)。 List列表可以当作队列,但是效率不高。
List列表推导式
    列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。 每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。 如果希望表达式推导出一个元组,就必须使用括号。
list = [1,2,3]
list2 = [[i, i**2] for i in list]
#print(list2[0])
print(list2)

可以使用if进行过滤:

[3*x for x in list if x > 3]

双调用:

[x*y for x in list1 for y in list2]
[list1[i]*list2[i] for i in range(len(list1))]

嵌套函数:

[str(round(355/113, i)) for i in range(1, 6)]

用推导式简化if-elif表达式:

array = ["能被3-5整除" if i%3==0 and i%5==0 else "能被5整除" if i%5==0 else "能被3整除" if i%3==0 else "不能被3-5整除" for i in range(30)]
print(array)
List列表嵌套

以下展示了3X4的矩阵列表:

matrix = [
     [1, 2, 3, 4],
     [5, 6, 7, 8],
     [9, 10, 11, 12],
 ]

矩阵转置(以3x4 -> 4x3 为例):

#方法一
matrix2 = [[row[i] for row in matrix] for i in range(4)]

#方法二
matrix2 = []
for i in range(4):
	matrix2.append([row[i] for row in matrix])

#方法三
matrix2 = []
for i in range(4):
	matrix2_row = []
	for row in matrix:
		matrix2_row.append(row[i])
	matrix2.append(matrix2_row)
List的三种删除方法
  1. remove(item)方法是直接对可变序中的元素进行检索删除,返回的是删除后的列表,不返回删除值(返回None)
  2. pop(index)方法是对可变序列中元素下标进行检索删除,返回删除值
  3. del(list[index])方法是对可变序列中元素下边进行检索删除,不返回删除值 补充:也可以使用del删除普通实体变量( del a)
list1=[1,3,6,7,8,9]

list1.remove[3]          #删除3
list1.pop(3)             #删除索引为 3 的项
del list1[3]             #删除索引为 3 的项
del list1[2:4]          #删除索引为 2~3 的项

4.Tuple
  1. 元组(tuple)与列表(List)类似,不同之处在于元组的元素不能修改。
  2. 元组写在小括号 () 里,元素之间用逗号隔开。
  3. 可以把字符串看作一种特殊的元组。(都可截取) string、list 和 tuple 都属于 sequence(序列)。
  4. 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
  5. 元组也可以使用+操作符进行拼接。
  6. 元组在输出时总是有括号的,以便正确表达嵌套结构;在输入时可能有或没有括号。
  7. 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则: tuple = () #空元组 tuple = (12,) #只含一个元素的元组
tuple_test1 = (a,2,True)
tuple_test2 = (3,)
print(tuple_test1+tuple_test2)

5.Set
  1. 集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
  2. 集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。
  3. 可以使用大括号 { } 或者 set() 函数创建集合 ▲注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。 创建格式: xxx = {param1, param2,…} 或 set() 补充:set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。
websites = {
          
   "Google","Amazon","FaceBook","Twitter","SpaceX"}
print(websites)

if "Google" in websites:
    print("Google is here")
else:
    print("Google is not here")

set可以进行集合运算

a = set(acbdeabc)
b = set(abcfg)

print(a)
print(a - b)     # a 和 b 的差集
print(a | b)     # a 和 b 的并集
print(a & b)     # a 和 b 的交集
print(a ^ b)     # a 和 b 中不同时存在的元素

集合也支持推导式

a = {
          
   x for x in abracadabra if x not in abc}  #输出abc之外的字母

输出:

{
          
   r, d}

6.Dictionary
  1. 列表是有序的对象集合,字典是无序的对象集合。
  2. 序列是以连续的整数为索引,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。
  3. 字典当中的元素是通过键(key)来存取的。
  4. 字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
  5. 键(key)必须使用不可变类型!!!(number,string,tuble),且key必须唯一
  6. 创建一个空的字典:dic = {}。
dictionary_test1 = {
          
   }
dictionary_test1[3] = "???"
dictionary_test1["who"] = "hosheaw"

dictionary_test2 = {
          
   1:"first", "second":"2"}
dictionary_test3 = {
          
   x:x**2 for x in (1,2,3)}

print(dictionary_test1)
print(dictionary_test2.keys())
print(dictionary_test3.values())

构造函数 dict() 直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对:

dic = dict([(sape, 4139), (guido, 4127), (jack, 4098)])
print(dic)
# 输出
{
          
   sape: 4139, jack: 4098, guido: 4127}

字典推导可以用来创建任意键和值的表达式词典:

dic = {
          
   x: x**2 for x in (2, 4, 6)}
print(dic)
# 输出
{
          
   2: 4, 4: 16, 6: 36}

当关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便:

dic = dict(sape=4139, guido=4127, jack=4098)
print(dic)
#输出
{
          
   sape: 4139, jack: 4098, guido: 4127}

遍历技巧

在字典中遍历时,关键字和对应的值可以使用 **items() **方法同时解读出来:

knights = {
          
   gallahad: the pure, robin: the brave}
for k, v in knights.items():
	print(k, v)
#输出
gallahad the pure
robin the brave

在序列中遍历时,索引位置和对应值可以使用 enumerate() 方法同时得到:

for i, v in enumerate([tic, tac, toe]):
	print(i, v)
#输出
0 tic
1 tac
2 toe

同时遍历两个或更多的序列,可以使用 zip() 组合:

questions = [name, quest, favorite color]
answers = [lancelot, the holy grail, blue]
for q, a in zip(questions, answers):
	print(What is your {0}?  It is {1}..format(q, a))
#输出
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

要反向遍历一个序列,调用 reversed() 函数:

a = [1, 2, 3, 4]
for i in reversed(a):
    print(i)
#输出
4
3
2
1

要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:

basket = [apple, orange, apple, pear, orange, banana]
for f in sorted(set(basket)):  #set去除重复元素
	print(f)
#输出
apple
banana
orange
pear

Python数据类型转换

  1. str(x) 将对象x转化为字符串类型
  2. repr(x) 将对象 x 转换为表达式字符串
  3. eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
  4. ord(char) 将一个字符转换为它的整数值 chr(x) 将一个整数转换为一个字符
  5. hex(x) 将一个整数转换为一个十六进制字符串
  6. oct(x) 将一个整数转换为一个八进制字符串
经验分享 程序员 微信小程序 职场和发展