Python中数据结构可以统称为容器,常见的数据结构包括序列(列表和元组等),映射(字典)和集合(Set)。
一 、序列(列表,元组和字符串)
- 列表
内容可变——中括号 []
创建列表
list1=['hello','world']
print (list1)
list2=[1,2,3]
print (list2)
list 函数
可以通过list函数对字符串创建列表
list3=list("hello")
print (list3)
#输出:['h', 'e', 'l', 'l', 'o']
列表函数
- append --- 用于在列表末尾追加新的对象
#Input:
lst=[1,2,3]
lst.append(4)
#Output:
[1,2,3,4]
- count --- 统计某个元素在列表中出现的次数
#Input:
x=[1,2,1,1,2,2,3]
x.count(1)
#Output:
3
- extend --- 在列表的末尾一次性追加另个序中多值
#Input:
a=[1,2,3]
b=[4,5,6]
a.extend(b)
#Output:
[1,2,3,4,5,6]
- Index --- 用于从列表中找到某个值第一匹配项的索引位置
lst.index(‘A’)
- insert --- 用于将对象插入到列表中
#Input:
numbers=[1,2,3,5,6,7]
numbers.insert(3,’four’)
#Output:
[1,2,3,’four’,5,6,7]
- pop --- 移除列表中的一个元素(默认最后),并返回该值 移除列表中的一个元素(默认最后),并返回该值 移除列表中的一个元素(默认最后),并返回该值,pop方法是唯一个既能修改列表又返回元素之(除了 None)的列表方法
#Input:
x=[1,2,3,5,6,7]
x.pop( )
#Output:
7
- remove --- 用于移出列表中某个值的第一匹配项 (修改列表但无返回值 )
Input:
x=[‘to’,’be’,’or’,’not’,’to’,’be’]
x.remove(‘be’)
Output:
[‘to’,’or’,’not’,’to’]
- reverse --- 将列表中的元素反向存放
#Input:
x=[1,2,3]
x.reverse()
#Output:
[3,2,1]
- sort --- 用于在原位置对列表进行排序 用于在原位置对列表进行排序
#Input:
x=[4,6,2,1,7,9]
x.sort( )
#Output:
[1,2,4,6,7,9]
- 元组
元组内容不可变——小括号()
创建元组
t1=1,2,3
t2="jeffreyzhao","cnblogs"
t3=(1,2,3,4)
t4=()
t5=(1,)
print (t1,t2,t3,t4,t5)
a. 逗号分隔一些值,元组自动创建完成;
b. 元组大部分时候是通过圆括号括起来的;
c. 空元组可以用没有包含内容的圆括号来表示;
d. 只含一个值的元组,必须加个逗号(,);
tuple函数
tuple函数和序列的list
函数几乎一样:以一个序列作为参数并把它转化为元组。如果 参数就算元组,那么该会原样返回:
t1=tuple([1,2,3])
t2=tuple("jeff")
t3=tuple((1,2,3))
print (t1)
print (t2)
print (t3)
t4=tuple(123)
print (t45)
#输出:
(1, 2, 3)
('j', 'e', 'f', 'f')
(1, 2, 3)
TypeError: 'int' object is not iterable
zip函数
zip函数接受任意多个序列作为参数,返回一个tuple列表。
zip函数是内置函数,能把迭代对象进行聚合,返回值是迭代对象聚合后的元组,可以用list函数把他转化成列表。
>>> k=list(zip(*[[1,2,3],[4,5,6]]))
>>> k
[(1, 4), (2, 5), (3, 6)]
- 字符串
内容不可变——引号‘’
创建
str1='Hello world'
print (str1)
print (str1[0])
for c in str1:
print (c)
格式化
字符串格式化使用格式化操作符即百分号 %来实现。
- 通用序列操作
索引
索引从 0(从左向右)开始,所有序列可通过这种方式进行索引。神奇的是,索引可以从最后一个位 置(从右向左)开始,编号是 -1。
str1='Hello'
nums=[1,2,3,4]
t1=(123,234,345)
print (str1[0])
print (nums[1])
print (t1[2])
输出:
H
2
345
分片
分片操作用来访问一定范围内的元素。通过冒号相隔两个索引实现:[a:b:c] 通常不包括索引为 b的数据 ,c为步长。分片的操作需要提供两个索引为边界,第一元素是包含在内,而第二个则不包含在内。
序列相加
str1='Hello'
str2=' world'
print (str1+str2)
num1=[1,2,3]
num2=[2,3,4]
print (num1+num2)
print (str1+num1)
#输出:
Hello world
[1, 2, 3, 2, 3, 4]
TypeError: must be str, not list
乘法
只能与数字相乘,元素个数翻倍
print ([None]*10)
str1='Hello'
print (str1*2)
num1=[1,2]
print (num1*2)
print (str1*num1)
#输出:
[None, None, None, None, None, None, None, None, None, None]
HelloHello
[1, 2, 1, 2]
TypeError: can't multiply sequence by non-int of type 'list'
成员资格
in运算符会用来检查一个对象是否为某序列(或者其他类型) 的成员即元素
str1='Hello'
print ('h' in str1)
print ('H' in str1)
#输出:
False
True
长度、最大小值
通过内建函数 len
、max
和 min
可以返回序列中所包含元素的数量、最大值和最小值。
二、映射
键类型
字典的键可以是数字、符串或者元组 ,键必须唯一。
在 Python中, 数字、符串和元组都被设计成不可变类型,而常见的列表以及集合都是可变的,所以列表和集合不能作为字典键 。字典键可以为任何不可变类型
A={key:value ,}
A[key]=value
自动添加
即使键在字典中并不存,也可以为它分配一个值这样就会建立新的项。
成员资格
表达式 item in d
(d为字典)查找的是键(contains key),而不是值( contains value)。
三、集合
strs=set(['jeff','wong','cnblogs'])
nums=set(range(10))
1.副本是被忽略的,即元素唯一性
2.集合元素的顺序是随意
3.集合常用方法:
A.union(B)
union操作返回两个集 合的并,不改变原有集合 。使用按位与(OR)运算符 “|”可 以得到一样的结果
其他常见操作包括 &(交集) ,<=,>=,-,copy(),add和remove
4.frozenset
集合是可变的,所以不能用做字典键。本身只包含值也就其他可以使用frozenset类型用于代表不可变(散列)的集合类型用于代表不可变(散列)的集合Set1.add(frozenset(set2)
网友评论