python各数据类型特点

本文介绍了Python的三种主要数据类型:数值、序列(如字符串、列表、元组)和散列(如字典、集合)。性能上,集合最快,字典次之,元组再次,列表最慢。内存占用则相反。元组用于不可变数据,列表用于可变数据。字典和集合内部通过哈希表实现,字典以键为哈希对象,集合直接操作元素。此外,文章还探讨了列表和字典推导式、迭代器和生成器的概念与用法。
摘要由CSDN通过智能技术生成

python3种数据类型:

        1.数值:1,2,3

        2.序列:字符串,列表,元祖

        3.散列:字典,集合。⭐️内部元素是无序的。

性能排序:

        从消耗时间上比较:集合<字典<元祖<列表

        从占用内存上比较:字典>集合>列表>元祖

一。元组与列表

list与tuple(列表与元组)性能:

pip install ipython(ipython可以分析函数的执行时间)

ipython

对比得出,在内存中创建元组比创建列表快了很多。 所以,数据会增减变化的用列表,不会变化的尽量用元组。

命名元祖:

二。字典和集合{ }

字典和集合的原理及应用:

        dict与set实现原理是一样的,都是将实际的值放入list中,唯一不同在于hash函数操作的对象;对于dict,hash函数操作的是其key;对于set,hash函数直接操作其元素,假设操作内容为x,其作为因变量放入hash函数,通过运算后取list的余数,转化为一个list的下标,此下标位置对于set而言用来放其本身,而对于dict而言,则是创建了两个list,一个list存放该下标key,另一个list存放该下标对应的value。其中,我们把实现set的方式叫做HashSet.实现dict的方式叫做Hash Map/Table(map就是指通过key来寻找value的过程)。

集合:se = set()或者se = {}.集合可自动去重

字典:dic = {'name':'chuntian'}

三。推导式:可推导出列表和字典

        1.列表推导式:[ ]              

list1 = [i**2 for i in range(10)]
print(list1)

输出:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

        2.字典推导式:{ }        

dict1 = {i: i+1 for i in range(10)}
print(dict1)
输出:
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}


a = ['a', 'b', 'c', 'd']
dict1 = {}
for i, j in enumerate(a):
    dict1[i] = j
print(dict1)
输出:
{0: 'a', 1: 'b', 2: 'c', 3: 'd'}


list1 = ["cook_str='sdgdssgk gjkjdg'", "pstm='但是风蛋糕跟'", "adg='sfs gg"]
dict1 = {i.split('=')[0]: i.split('=')[1] for i in list1}
print(dict1)
输出:
{'cook_str': "'sdgdssgk gjkjdg'", 'pstm': "'但是风蛋糕跟'", 'adg': "'sfs gg"}

四。迭代器和生成器

迭代器:只要能通过next()从里面取值的,都叫迭代器(生成器属于迭代器的一种);只要是能够通过for循环进行遍历的,都是可迭代对象。iter()函数可以将一个可迭代对象转换成一个迭代器。

# 可以使用iter()方法将可迭代对象转化为一个迭代器
list1 = [1, 2, 3, 4]
print(next(list1))  # TypeError: 'list' object is not an iterator

输出:
TypeError: 'list' object is not an iterator
# 可以使用iter()方法将可迭代对象转化为一个迭代器
list1 = [1, 2, 3, 4]
list_iter = iter(list1)
print(next(list_iter))
print(next(list_iter))

输出:
1
2

生成器:( )节约内存,提升性能。

                 yield关键字只能用在函数中。

                 使用next()取值 

# ()生成器表达式
iter1 = (i for i in range(5))
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
print(next(iter1))
输出:
0
1
2
3
4
Traceback (most recent call last):
  File "/Users/jeanettian/PycharmProjects/demo/dataType/生成器.py", line 8, in <module>
    print(next(iter1))
StopIteration

函数内中使用yield关键字实现生成器 

def func():
    yield 100
    print("hello,world")
    yield 200
    yield 300


res = func()
print(next(res))  # 100
print(next(res))  # hello,world  200
print(next(res))  # 300
print(next(res))  # 300

send()方法可往生成器内添加数据,next()方法可以从生成器中取出数据。 

ge.send()示例:


def func():
    for i in range(1, 5):
        res = yield i
        print('res的值为:', res)


ge = func()  # ge是生成器对象
print(next(ge))  # 从生成器取值
print(ge.send(100))  # 往生成器中添加数据,会在yield暂停后,将值赋值给res接收
print(next(ge))

输出:
1
res的值为: 100
2
res的值为: None
3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值