> 文章列表 > Python从入门到精通6天(Python数据类型概述)

Python从入门到精通6天(Python数据类型概述)

Python从入门到精通6天(Python数据类型概述)

Python数据类型概述

数据类型

Python有数字、字符串、列表、元组、字典、集合六大数据类型,其中:

  • 不可变数据类型(修改时内存地址不发生变化):元组(tuple)、字符串(strings)、数字(number)
  • 可变数据类型(修改时内存地址发生变化):列表(list)、字典(dict)、集合(set)

序列是Python中最基本的数据结构,序列中的每个元素都分配一个数字,即索引,第一个元素的索引是0,第二个是1,依次类推。序列可以进行的操作有:索引、切片、加、乘、检查成员,内置确定序列长度以及确定最大和最小的元素的方法。

列表

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现,列表的元素不需要具有相同的类型,每个值都可以通过索引进行标识。创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,如:[1,'j',3,4,3]

创建列表可以通过以下方式进行创建:

[x*2 for x in range(5)]

Python包含以下函数处理列表:

  • len(list) 列表元素个数
  • max(list) 返回列表元素最大值
  • min(list) 返回列表元素最小值
  • sum(list) 求和
  • list(seq) 将元组转换为列表

代码如下:


# 创建一个列表
list1 = [2,4]# 求列表长度
print(len(list1))# 返回列表最大值
print(max(list1))# 返回列表最小值
print(min(list1))# 求和
print(sum(list1))# 将元组转换成列表print(list((1,2)))

列表的切片操作,列表也可以使用[]进行取值操作,跟字符串一样list[start:end:step]

通过循环对列表进行遍历:

list2 = ['e','s',5,8]# 通过下标进行元素的取出
for index in range(len(list2)):print(list2[index])# 通过enumrate函数进行取出
for index,elem in enumerate(list2):print('元素为:',elem,'索引',index)# 直接通过遍历进行取出
for elem in list2:print(elem)

Python还包含了list方法,因为列表为可变数据类型,所以对其进行增、删、改、查操作的时候不会产生新的对象:

  • list.append(obj) 在列表末尾添加新的对象
  • list.count(obj) 统计某个元素在列表中出现的次数
  • list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
  • list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
  • list.insert(index, obj) 将对象插入列表,指定位置进行插入
  • list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
  • list.remove(obj) 移除列表中某个值的第一个匹配项
  • list.reverse() 反向列表中元素
  • list.sort([func]) 对原列表进行排序

代码如下:

list1 = [1,2,1,2]
list2 = [4,3]# 添加新的对象
list1.append(3)
print(list1)# 统计某个元素出现的次数
print(list2.count(1))# 在列表末尾追加一个列表
list1.extend(list2)
print(list1)# 找出某个值第一个匹配项的索引位置
print(list1.index(2))# 将对象插入列表,指定位置插入
list1.insert(2,5)
print(list1)# 删除元素,可指定位置,默认为最后一个
list1.pop(3)
print(list1)# 移除指定第一次出现的元素
list1.remove(3)
print(list1)# 将列表的元素进行反向
list1.reverse()
print(list1)# 对列表元素进行排序,默认为升序
list1.sort(reverse=True)
print(list1)

元组

Python的元组(tuple)与串列(list)类似,不同之处在于元组的元素不能修改(以保护资料),元组可以使用小括号表示,列表使用中括号表示,元组中只包含一个元素时,需要在元素后面添加逗号:(1,)。元组也支持用下列索引来访问元组中的值、切片操作等。

元组中的元素值不允许修改的,但可以用+号对元组进行连接操作产生新的元组。

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。

Python内置函数处理元组:

  • len(tuple) 取得元组元素个数
  • max(tuple) 查询元组中元素最大值
  • min(tuple) 查询元组中元素最小值
  • tuple(list) 将串列转换为元组
tuple1 = (12,44,33)# 元组个数
print(len(tuple1))# 最大值
print(max(tuple1))# 最小值
print(min(tuple1))list1 = [12,432,34]
# 将字符串转换成元组
print(tuple(list1))

元组在创建时间和占用的空间上面都优于列表,我们在项目中尤其是多线程环境中可能更喜欢使用哪些不变的对象,原因是:

  • 对象状态不能修改,可以避免由此引起的不必要的程序错误,简单的说就是一个不变的对象要比可变的对象更加容易维护

  • 没有任何一个线程能够修改不变对象的内部状态,一个不变对象自动就是线程安全的,这样就可以省掉处理同步化的开销,一个不变对象可以方便的被共享访问。

集合

集合(set)数据类型是无序不重复的元素的集合数据结构。集合的元素为不可修改的对象,用{}(花括号)表示集合对象。

set内置下列常用方法:

  • set.add()为集合添加元素
  • set.clear()移除集合中的所有元素
  • set.remove()移除集合中的元素,不存在的则会报错
  • set.discard()移除元素,不存在的元素不会报错

由于集合不是很常用我在这里就不进行代码展示,感兴趣的同学可以自己去尝试。

字典

字典(dict)是另一种可变容器模型,Python中的字典跟我们生活中使用的字典是一样一样的,它可以存储任意类型对象,与列表、集合不同的是,字典的每个元素都是由一个键和一个值组成的“键值对”,键和值通过冒号分开。

dict包括下列内置函数:

  • del d[key] 删除字典中的键-值对
  • key in d 判断键是否在字典
  • key not in d 判断键不在字典
  • iter(d) 为iter(d.keys())的简写
  • reversed(d) 为reversed(d.keys())的简写,返回逆向迭代器
  • len(dict) 计算字典元素个数,即键的总数
  • list(dict) 返回字典的键的list
  • str(dict) 字典内容以可打印的字符串表示
  • type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型

dict包括下列方法:

  • dict.clear() 删除字典内所有元素
  • dict.copy() 返回一个字典的浅复制
  • dict.fromkeys(seq,val) 类方法。创建一个新字典,以序列seq中元素做字典的键,可选的val为字典所有键对应的初始值
  • dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
  • dict.items() 以列表返回可遍历的(键, 值) 元组数组
  • dict.keys() 返回字典所有的键的静态列表
  • dict.setdefault(key, default=None) 和get()类似返回其值, 但如果键不存在于字典中,将会添加键并将值设为default
  • dict.update(dict2) 把字典dict2的键/值对更新到dict里
  • dict.values() 以列表返回字典中的所有值
  • dict.pop(key[,default]) 删除字典给定键 key 所对应的值,返回被删除的值。key值必须给出。 否则,返回default值
  • dict.popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)

练习

  1. 设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。
import randomdef generate_code(code_len=4):"""生成指定长度的验证码:param code_len: 验证码的长度(默认4个字符):return: 由大小写英文字母和数字构成的随机验证码"""all_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'last_pos = len(all_chars) - 1code = ''for _ in range(code_len):index = random.randint(0, last_pos)code += all_chars[index]return code
  1. 设计一个函数返回传入的列表中最大和第二大的元素的值。
def max2(x):m1, m2 = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])for index in range(2, len(x)):if x[index] > m1:m2 = m1m1 = x[index]elif x[index] > m2:m2 = x[index]return m1, m2
  1. 双色球选号。
from random import randrange, randint, sampledef display(balls):"""输出列表中的双色球号码"""for index, ball in enumerate(balls):if index == len(balls) - 1:print('|', end=' ')print('%02d' % ball, end=' ')print()def random_select():"""随机选择一组号码"""red_balls = [x for x in range(1, 34)]selected_balls = []selected_balls = sample(red_balls, 6)selected_balls.sort()selected_balls.append(randint(1, 16))return selected_ballsdef main():n = int(input('机选几注: '))for _ in range(n):display(random_select())if __name__ == '__main__':main()