Python学习之特有数据类型

列表list

常用写法:[内容]
强制类型转化:list(其他类型)

list1 = list("DATA")
print(list1)#['D', 'A', 'T', 'A']

list支持用下标索引,除了正序从0到n-1,还支撑逆序从-1到-n

list1 = [1,2,3,4,5,6,7,8,9]
print(list1[0])#1
print(list1[-1])#9

list还支持切片操作list[start:stop:step]返回值为一个list

list1 = [1,2,3,4,5,6,7,8,9]
print(list1[0:3])#[1, 2, 3]
print(list1[0:3:2])#[1, 3]
print(list1[-1:-5:-1])#[9, 8, 7, 6]
print(list1[:3])#[1, 2, 3]
print(list1[2:])#[3, 4, 5, 6, 7, 8, 9]
print(list1[::2])#[1, 3, 5, 7, 9]
print(list1[:])#[1, 2, 3, 4, 5, 6, 7, 8, 9]相当于全部遍历
print(list1[:-1])#[1, 2, 3, 4, 5, 6, 7, 8]
print(list1[::-1])#[9, 8, 7, 6, 5, 4, 3, 2, 1]相当于逆序遍历

list的两种反向遍历函数,内置reversed()和列表方法reverse()

list1 = [1,2,3,4,5,6,7,8,9]
print(reversed(list1))#<list_reverseiterator object at 0x0000028E1E447668>
print(list(reversed(list1)))#[9, 8, 7, 6, 5, 4, 3, 2, 1]
list1.reverse()
print(list1)#[9, 8, 7, 6, 5, 4, 3, 2, 1]

区别在于:内置函数不改变序列本身,后者将改变序列。内置函数返回值是一个迭代器可以通过list()强制转换的方式显示其值。

list的extend和append
list1 = [1,2,3,4,5,6,7,8,9]
list2 = list1
print(list1+list2)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1.extend(list2)
print(list1)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list1 = [1,2,3,4,5,6,7,8,9]
list2 = [1,2,3,4,5,6,7,8,9]
list1.append(list2)
print(list1)#[1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3, 4, 5, 6, 7, 8, 9]]
list1 = [1,2,3,4,5,6,7,8,9]
list2 = list1
list1.append(list2)
print(list1)#[1, 2, 3, 4, 5, 6, 7, 8, 9, [...]]

extend()相当于’+’,以成员身份追加,而append()是平等追加,整体作为一个成员
两个列表的并列相加计算,zip()函数为并行迭代

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list2 = [9, 8, 7, 6, 5, 4, 3, 2, 1]
print([i + j for i, j in zip(list1, list2)])
#[10, 10, 10, 10, 10, 10, 10, 10, 10]

列表推导式

[2 for i in range(20)]

  • 先做range(),再做i,最后做2
  • 列表推导式必须放在[]内
  • for之前是个表达式
print(["hhh" for i in range(0, 5)])#['hhh', 'hhh', 'hhh', 'hhh', 'hhh']
print([i for i in range(0, 5, 2)])#[0, 2, 4]
print(list(i for i in range(0, 5, 2)))#[0, 2, 4]
print(["!%d!" % i for i in range(1, 6)])#['!1!', '!2!', '!3!', '!4!', '!5!']
print([type(i) for i in [True, 1.0, 2 + 3j, {'name'}]])
#[<class 'bool'>, <class 'float'>, <class 'complex'>, <class 'set'>]

列表的增删改查

  • li.insert(a,b) a为下表,b为值
  • li.pop(a) a为下标
  • del li[a] a为下标
  • li.remove(a) a为值 如果有多个只会删除一个
    全部删除[x for x in lst_1 if x != a]
    list(filter(lambda i : i != a, lis_1))
    list(set(lis_1))过滤重复值
a = [1, 2, 3, 4, 4, 5, 6, 7]
a = [x for x in a if x != 4]
print(a)  # [1, 2, 3, 5, 6, 7]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = list(filter(lambda x: x % 2 == 0, a))
print(a)  # [2, 4, 6, 8, 10]
list1 = [3,2,1]
print(len(list1))#3
print(sorted(list1))#[1, 2, 3]不改变列表本身
list1.sort()
print(list1)#[1, 2, 3]改变列表
a = ['a', 'b', 'c']
b = [1, 2, 3]
print(list(zip(a, b)))#zip返回的是迭代器
#[('a', 1), ('b', 2), ('c', 3)]
print([x.upper() for x in a])
#['A', 'B', 'C']
print([x.upper() for x in a if x != 'a'])
#['B', 'C']
a = ['a', 'b', 'c']
print(list(enumerate(a)))  # enumerate()返回下标
#[(0, 'a'), (1, 'b'), (2, 'c')]
print(dict((value, i) for i, value in enumerate(a)))
#{'a': 0, 'b': 1, 'c': 2}

在这里插入图片描述

元组:

不可变对象,无法使用赋值、tuple.sort()
tuple.count(x)统计x在元组中出现次数
支持拆包赋值

a = (1, 2, 3)
x, y, z = a
print(x, y, z)#1 ,2 ,3

字符串:

不可变对象
字符串合并
字符串的一些操作

#字符串合并
a = '+'
print(a.join(['1','2','3']))#1+2+3
#strip:去除字符串的左右空白
a = '    hello world      '
print(a)  # '    hello world      '
print(a.strip())  # 'hello world'
#ord和chr 计算对应的Unicode编码/对应的字符
print(ord('A'))#65
print(chr(97))#a
#r表示原始字符串
print("\\")#\
print(r"\\")#\\
排序
str1 = ['abc', 'aaba', 'abefg', 'bb', 'cc']
str1.sort()
print(str1)  # ['aaba', 'abc', 'abefg', 'bb', 'cc']
str1.sort(key=lambda x: len(list(x)))#按长度排
print(str1)  # ['bb', 'cc', 'abc', 'aaba', 'abefg']
str1.sort(key=lambda x: len(set(x)))#按包含不同字符个数排
print(str1)  # ['bb', 'cc', 'aaba', 'abc', 'abefg']

序列:

包含字符、元组和列表
支持索引、切片、迭代、拆包、*运算

a = '123'
b = (1, 2, 3)
c = [1, 2, 3]
print(a * 3)  # 123123123
print(b * 3)  # (1, 2, 3, 1, 2, 3, 1, 2, 3)
print(c * 3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]
  • len()
  • sorted()
  • reversed()
  • enumerate() : 跟踪和枚举下标
  • zip() :两个对象的同步计算

集合:

  • 确定性:一个元素只有属于或不属于
  • 无序性:集合中的元素无序,无法用下标访问
  • 互异性:各个元素互异,{1, 2} = {1, 1, 2}
    集合运算
a = {1, 3, 5, 7}
b = {2, 4, 6, 8}
print(2 in a)  # 包含
# False
print(3 not in b)  # 不包含
# True
print(a == b)  # 等于
# False
print(a != b)  # 不等于
# True
print(a < b)  # 子集
# False
print({1, 3}.issubset(a))  # 判断是否为子集
# True
print(a.issuperset({1, 3}))  # 判断是否为父集
# True
print(a | b)  # 合集
# {1, 2, 3, 4, 5, 6, 7, 8}
print(a & b)  # 交集
# set()
print(a - {1, 3})  # 差集
# {5, 7}
print(a ^ b)  # 对称差分:集合A与集合B中所有不属于A∩B的元素的集合
# {1, 2, 3, 4, 5, 6, 7, 8}
c = frozenset({1, 2, 3, 4})  # 不可变对象,数据分析和数据科学项目中通常采用frozenset

字典:

无序容器,键值对
a = {‘a’: 1, ‘b’: 2, 3: 3}

  • 用’{}’
  • key和value之间用冒号(:)分隔
  • 不同key/value之间用逗号(,)分隔
a = {'a': 1, 'b': 2, 'a': 3}
print(a)#{'a': 3, 'b': 2}
无序结构,key是区分value的唯一依据
#可通过key访问value
a = {'a': 1, 'b': 2, 'c': 3}
print(a['a'])#1
#可变
a['a'] = 4;
print(a)#{'a': 4, 'b': 2, 'c': 3}

迭代器:

  • 能够接收“可迭代对象”的函数都可以接受“迭代器”
  • 用Python内置函数iter()可以将“可迭代对象”转换成“迭代器”
    可迭代对象:可以直接作用与循环语句的对象
    迭代器:可以被内置函数next()调用,并不断返回下一个值的对象
    (可迭代对象不一定是迭代器)
    用内置函数next()遍历迭代器
a = [1, 2, 3, 4, 5]
it = iter(a);
print(next(it))  # 1
print(next(it))  # 2
print(next(it))  # 3

生成器

不用return语句,而用yeild语句
不是立即计算,而是惰性计算,在调用生成器时,不会立即执行它,而是推迟至需要调用其中的每个元素时才运行

def myfuncion():
    for i in range(1, 10):
        yield i + 1
print(myfuncion())
#<generator object myfuncion at 0x0000026526D4B8B8>
for i in myfuncion():
    print(i, end=',')
#2,3,4,5,6,7,8,9,10,
发布了28 篇原创文章 · 获赞 0 · 访问量 855

猜你喜欢

转载自blog.csdn.net/weixin_43866408/article/details/104345144