Python之基础数据类型(二)

这篇具有很好参考价值的文章主要介绍了Python之基础数据类型(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


列表 list

1、是一个有序的项目集合
2、是可变数据类型
3、可以存放任何数据类型

初始化
lst = []	# 方式一
print(type(lst))  # <class 'list'>
lst2 = list()	# 方式二
print(lst2, type(lst2))  # [] <class 'list'>
lst3 = list("abc")  # 参数传递必须为可迭代对象,即可用for循环遍历
print(lst3)  # ['a', 'b', 'c']
切片(有序)

切片与字符串一模一样

>>> lst = ['x', "y", 1, None]
>>> print(lst[::-1])
[None, 1, 'y', 'x']
# 可以使用切片赋值,当传递的参数超过切片长度时,会自动依次添加到切片后面的位置,相当于insert(),列表长度增加;当参数长度小于切片长度时相当于替换replace(),列表长度减小
lst[0:2]="abc"
可变数据类型
# 使用下标或切片进行赋值都不会重新产生一个列表,列表所指向的内存空间不会改变
>>> lst=[]
>>> print(lst,id(lst))
[] 140687159259336
>>> lst[0]='a'	# 下标不能溢出,replace()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> lst[0:]='a'		# 切片可以溢出,溢出即插入,不溢出就替换
>>> print(lst,id(lst))
['a'] 140687159259336
>>> lst[0]='b'
>>> print(lst,id(lst))
['b'] 140687159259336
# 使用"lst="赋值时会产生新的列表,相当于重定向
>>> lst=['c']
>>> print(lst,id(lst))
['c'] 140687159250760
存放任何数据类型
# 可以存放任何数据类型,包括函数、类
lst.append(print)  # 这里print不加()代表加入print函数,加了括号代表返回值
print(lst)

常用方法

print(dir(list))  # 查看所有方法
# 增
lst.append(['a', 'b'])  # append()在末尾添加元素 这里添加了个列表
lst.insert(0, list)  # insert()在指定位置插入元素   这里插入了list类
lst.extend("abc")  # extend()在末尾添加列表,必须也是可迭代对象,相当于 +
# 删
lst.pop(2)  # pop()删除指定位置的元素,默认最后一个
lst.remove('x')  # remove()删除指定元素
lst.clear()  # clear()清空列表
# 改
lst.reverse()  # reverse()反转,会改变原列表值
lst = ['x', 'y', '31', '241']
lst.sort()  # sort()排序,字符串通过unicode码进行排序,list和string不能同时存在,str和int也不能同时存在
# 统计(查)
print("************************")
print(len(lst))
print(lst.count("x"))
print(lst.index("x"))#  返回下标
lst=[1,2,3,4,5,6]
print(max(lst))
print(min(lst))
print(sum(lst))

运算

>>> lst = ['x', 'y']
>>> lst2 = ['a', 'b']
>>> lst3 = lst + lst2	# 加法
>>> print(lst3, id(lst), id(lst2), id(lst3))
['x', 'y', 'a', 'b'] 140687159259336 140687159250760 140687159259400
>>> lst3 = lst * 2		# 乘法
>>> print(lst3)
['x', 'y', 'x', 'y']

底层存储(地址值的传递)

>>> lst4 = lst3  # 这样的赋值传递的是地址值
>>> print(id(lst3), id(lst4))
140687159259656 140687159259656
# 当其中一个改变了,其他指向这个地址值的的变量也会变,
# 与string不同,string是不可变数据类型,当变量改变时,string变量底层是指向了另一个地址,原地址的值不会变
>>> lst3.append("zz")
>>> print(lst3, lst4)
['x', 'y', 'x', 'y', 'zz'] ['x', 'y', 'x', 'y', 'zz']
# 使用copy()或者切片就不会指向同一个地址
... lst5 = lst3.copy()
>>> print(id(lst3), id(lst5))
140687159259656 140687159259400
>>> lst6 = lst3[:]
>>> print(id(lst3), id(lst6))
140687159259656 140687159260168

遍历

>>> for i in lst3:	# 遍历每个元素
...     print(i)
... 
x
y
x
y
zz
>>> for k, v in enumerate(lst3):  # 类似go的遍历,k为下标(从0开始),v为值(类型为str)
...     print(k, v)
... 
0 x
1 y
2 x
3 y
4 zz

示例

对输入的字符串只保留字母和数字,然后再进行判断是否为回文

while 1:
    str1 = input(":")
    if str1=="q":
        break
    str2 = ""
    for i in str1:
        if i.isalnum():		# 字符串保留字符数字
            str2 += i
    str2 = str2.lower()		# 忽略大小写
    if str2 == str2[::-1]:	# 反转字符串进行比较
        print("是回文")
    else:
        print("不是回文,请重新输入,按q退出")

对于一个已知的整数列表,给出一个整数,判断列表中是否有两个数相加与其相等

# 示例:lst = [2,4,6,7,3,5,9,12]
# 从键盘输入一个数, 10  --》10=4+6 --》输出下标:1,2
lst=[3,5,7,11,13,17,2,1]
num=int(input("请输入一个整数:"))
flag1=1
for k,v in enumerate(lst[:len(lst)-1]):
    for i in lst[k+1:]:
        if int(v)+int(i)==num:
            print(f"{num}={v}+{i}")
            flag1=0
if flag1==1:
    print(f"没有两个数加起来等于{num}")

元组 tuple

初始化

# 方式一
>>> t1 = (1)  # 一个元素无法识别是元组还是括号,此时为int类型
>>> t2 = (1,)  # 一个元素加个逗号就行
>>> t3 = (1, 2)
>>> print(type(t1), type(t2), type(t3))
<class 'int'> <class 'tuple'> <class 'tuple'>
# 方式二
>>> b=tuple("abc")
>>> print(b)
('a', 'b', 'c')

可以存放任意数据类型

可以切片

与list的主要区别是不可变

不可变数据类型,改变任意地址值都会报错:TypeError: ‘tuple’ object does not support item assignment

>>> t3[1]=1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

元组内存放可变数据类型时,改变可变数据类型的值是可以的,因为元组的地址值并没有改变

>>> t4 = ("x", "abc", [1, 2, 3])
>>> t4[2].append(4)
>>> print(t4)
('x', 'abc', [1, 2, 3, 4])

运算

# 运算也可以,相加会生成新元组
print(t3 + t4)

与list相互转换

lst = list(t4)
print(lst, type(lst))
t5 = tuple(lst)
print(t5, type(t5))

字典 dict

键值映射的数据结构、无序、可变数据类型

初始化

d1 = {"name": "wenyao", "age": 18}
print(d1["name"])  		# key不存在时会报错
d1["gender"] = "female"  # key不存在时新增,存在时重新赋值
d1.get("xx", 1)  		# key不存在时不会报错,默认返回值为None,也可以指定key不存在时的返回值,这里指定为 1

key 自动去重,后面的覆盖前面的

>>> d2 = {1: "a", 2: "b", 2: "c"}
>>> print(d2)
{1: 'a', 2: 'c'}

key必须为可hash对象,暂时理解为不可变数据类型,字符串、元组都行(但元组里的元素也得是不可变数据),列表不行

value可以是任何值

删除

d1 = {1: "x", 2: "y"}
print(d1.pop(1))  	# pop()删除指定key,返回velue值
print(d1.popitem())  # popitem(),默认删除最后一个key,返回(key,value)

字典的合并

>>> print(d1, d2)
{1: 'x', 2: 'y'} {1: 'a', 2: 'c'}
>>> d1.update(d2)  # 将d2合并到d1,d2值不变,d1值改变
>>> print(d1, d2)
{1: 'a', 2: 'c'} {1: 'a', 2: 'c'}
>>> d1 = {"a": 1}
>>> d2 = {"b": 2}
>>> d3 = dict(d2, **d1)  # 将d1和d2合并成新的字典,d1 d2的值都不变,key类型必须为string,且需要符合变量名规范
>>> print(d1, d2, d3)
{'a': 1} {'b': 2} {'b': 2, 'a': 1}

in、not in、values()

>>> print("b" in d3, 2 in d3)  # 这样判断的是key
True False
>>> print(2 in d3.values())  # values()返回values列表,类型为'dict_values'
True
>>> print(type(d3.values()))
<class 'dict_values'>

遍历

for i in d3:  # 只返回key
    print(i)
for i in d3.items():  # 返回(key,value),类型为元组
    print(i)
for k, v in d3.items():  # 分别赋值key、value
    print(f"{k}->{v}")
for i in d3.values():  # 只返回value
    print(i)

常见应用格式

d1 = {"root": {"passwd": "123456", "balance": 500}, "admin": {"passwd": "123456admin", "balance": 300}}
print(d1["root"]["passwd"])		# 方式一
print(d1.get("root").get("passwd"))		# 方式二

与列表、元组的转换

>>> lst = [("a", 1), ("b", 2)]  # 只有这种列表里是元组且是键值对形式的才可以转字典
>>> d4 = dict(lst)
>>> print(d4)
{'a': 1, 'b': 2}
>>> print(list(d4))  # 得到 key 列表
['a', 'b']
>>> print(list(d4.items()))  # 得到 (key,value) 列表
[('a', 1), ('b', 2)]

json 格式的转换

json 是一种轻量型的数据交换格式,可用于字符串与字典的转换

>>> import requests
>>> result = requests.get("https://dhfmainapi.360dhf.cn/api/v2/zy-order-pay-log/real-time-overview")
>>> str1 = result.text  # 得到一个json格式的字符串
>>> print(type(str1), str1)
<class 'str'> {"code":400,"data":null,"message":"请先登录"}
>>> import json
>>> d1 = json.loads(str1)  # 将字符串转换成字典
>>> print(type(d1), d1)
<class 'dict'> {'code': 400, 'data': None, 'message': '请先登录'}
>>> d1["test"] = "abc"
>>> str2 = json.dumps(d1)  # 将字典转换成字符串
>>> print(type(str2), str2)  # 汉字会被转换为unicode编码
<class 'str'> {"code": 400, "data": null, "message": "\u8bf7\u5148\u767b\u5f55", "test": "abc"}

字典底层原理–空闲哈希表

参考链接:为什么Python 3.6以后字典有序并且效率更高? - 知乎 (zhihu.com)

对于d1={“a”:1},在空闲散列表中先加密,根据**哈希值最后一位数(或者取余)**确定存储位置,(为什么要加密?因为通过取余可以快速找到数据位置)

如果有其他元素的尾数一样(散列冲突),则用开放地址寻址法,使用开放地址函数,一般是向下寻找

先记住:表中存储的是key哈希值、key地址值、value地址值

indices存放元素在entries里的具体位置

hash算法:把任意长度的输入,变成固定长度的输出,单向加密算法,一种明文只对应一种密文,不过极小概率不同的明文对应同一种密文

破解:撞库(存储一些明密文的对应) --> 解决:加盐(密文长度加长)

应用:1.数据加密

2.签名摘要(防止篡改或完整性验证):通过对整个文件加密得到哈希值,然后接收方接收后对文件进行加密验证看是否与之前一致

Linux体验之MD5,命令:echo xxx |md5sum 或者 md5sum xxx.txt可以加密语句也可以加密文件

集合 set

集合(set)可以理解为只有key的字典

因此,key唯一,无序,key得是可hash对象————不可变

初始化

>>> s1={1,2,3}		# 方式一
>>> s2=set()		# 方式二
>>> print(type(s1),type(s2))
<class 'set'> <class 'set'>
>>> s3={}
>>> print(type(s3))		# 使用{}初始化的数据类型是字典
<class 'dict'>

与list的转换

通过set()、list()函数可以相互转换

>>> lst=[1,2,3]
>>> s3=set(lst)		# 如果有重复的会去掉
>>> print(s3)
{1, 2, 3}
>>> lst2=list(s3)
>>> print(lst2)
[1, 2, 3]

添加、删除

>>> # 添加
... s1.add(4)	#  添加到末尾
>>> s1.update("abc")	# 只能添加可迭代对象,然后一个一个add
>>> # 删除
... s1.remove(4)	# 删除指定元素,没有就报错
>>> s1.discard(4)	# 不会报错
>>> print(s1)
{1, 2, 3, 'b', 'c', 'a'}
>>> s1.remove(4)	# 删除指定元素,没有就报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 4

集合运算

#运算 -:差集,在a不在b  &:交集  |:并集,ab所有元素  ^:对称差集,只在a或者只在b
a={1,2,3}
b={2,3,4}
print(a.union(b))#      |
print(a.intersection(b))#   &
print(a.difference(b))#     -
print(a.symmetric_difference(b))#   ^

小结

本节文章主要讲解了python中的容器类型,包括列表、元组、字典和集合,内容包含了其特点和常用方法,帮助大家快速了解容器类型的使用和异同。如有不足之处,希望能帮忙指出,笔者会及时改正,感谢大家观看!文章来源地址https://www.toymoban.com/news/detail-699975.html

到了这里,关于Python之基础数据类型(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python基础】- 基础数据类型(下)

       🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 上文我们介绍了Python基础数据类型中的数字、布尔、字符串类型,今天主要介绍列表、元

    2024年02月09日
    浏览(26)
  • 【Python数据类型-字典】------- PYTHON基础12

    字典(Dictionary)指一种可变的容器,这个容器可以存储任意类型的数据。 字典里的每个元素为一个键值对, 键值对 格式如下: key : value key 被称为键值,它在字典中的值是唯一的(不能重复)。 value 被称为值,它在字典中可以不唯一(可以重复)。 每个键值对用英文冒号

    2024年02月04日
    浏览(41)
  • 【Python数据类型-元组】------- PYTHON基础11

    元组与列表类似。 元组的列表最大区别是: 元组的元素是不可被修改,添加,和删除的。 元组使用 小括号 定义,而列表使用中括号定义。 输出 输出 3.1. 列表转为元组,通过内置函数tuple()实现,比如: 输出 3.2. 元组转为列表,通过内置函数list()实现 输出 4.1. 元组更新:构

    2024年02月04日
    浏览(36)
  • python爬虫_python基础数据类型

    大家好,我是yma16,本文分享关于python的基础数据类型,作为python爬虫专栏的基石。 发展历史: Python 是由 Guido van Rossum 在八十年代末和九十年代初,在荷兰国家数学和计算机科学研究所设计出来的。 Python 本身也是由诸多其他语言发展而来的,这包括 ABC、Modula-3、C、C++、Alg

    2024年02月11日
    浏览(24)
  • 【python基础】复杂数据类型-列表类型(元组)

    列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的。 然而,有时候需要创建一系列不可修改的元素,元组可以满足这种需求 python将不能修改的值称为不可变的,而不可变的列表被称为元组。 元组看起来犹如列表,但使用圆括号而不是方括号来标识

    2024年02月07日
    浏览(54)
  • 【python基础】复杂数据类型-列表类型(数值列表)

    视频讲解 列表非常适合用于存储数字集合,而Python提供了很多工具,可帮助我们高速地处理数字列表。 Python的range函数能够轻松的生成连续一系列数字。 其语法格式:range(起始值,终止值) 我们通过之前学习的for循环输出range函数生成的连续数字,编写程序如下所示: 我们通

    2024年02月07日
    浏览(40)
  • 【python基础】复杂数据类型-列表类型(列表切片)

    视频讲解 前面学习的是如何处理列表的 所有数据元素 。Python还可以处理列表的部分元素,Python称之为切片。 创建切片,可指定要使用的第一个数据元素的索引和最后一个数据元素的索引。与range函数一样,Python在到达指定的第二个索引 前面的 数据元素后停止。比如要切片

    2024年02月07日
    浏览(40)
  • 【python基础】基本数据类型-字符串类型

    视频讲解: 字符串数据类型01 字符串就是一系列字符。在python中,用引号括起来文本内容的都是字符串。 其语法格式为:‘文本内容’或者“文本内容” 编写程序如下所示 我们发现其中的引号可以是单引号,也可以是双引号。这样的灵活性可以使我们进行引号之间的嵌套。

    2024年02月06日
    浏览(35)
  • Python之基础数据类型(二)

    1、是一个有序的项目集合 2、是可变数据类型 3、可以存放任何数据类型 初始化 切片(有序) 切片与字符串一模一样 可变数据类型 存放任何数据类型 常用方法 运算 底层存储(地址值的传递) 遍历 示例 对输入的字符串只保留字母和数字,然后再进行判断是否为回文 对于

    2024年02月09日
    浏览(24)
  • 【python基础】复杂数据类型-列表类型(排序/长度/遍历)

    在创建的列表中,数据元素的排列顺序常常是无法预测的。这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息。有时候希望保留列表数据元素最初的排列顺序,而有时候又需要调整排列顺序。python提供了很多列表数据元素排序的方式,可根据情况选用

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包