Python提供了多种内置的数据结构,包括列表(List
)、元组(Tuple
)和字典(Dictionary
)。这些数据结构在Python编程中都有着广泛的应用,但它们各有特点和适用场景。
列表是一种有序的集合,可以随时添加和删除其中的元素。列表是可变的,也就是说,你可以修改列表的元素和大小。列表的元素可以是任何类型,包括数字、字符串、布尔值,甚至可以是其他列表。列表通常用于存储有序的元素集合,例如一列数字或一组名字。
元组和列表非常相似,但元组是不可变的,也就是说,你不能修改元组的元素和大小。这使得元组比列表更安全,因为你可以确保元组的元素在程序运行过程中不会被改变。元组通常用于存储不应该被改变的数据集,例如一个日期或一个地理位置的经纬度。
字典是一种无序的集合,它存储的是键值对。字典的键必须是唯一的,而值可以是任何类型。字典是可变的,也就是说,你可以添加、删除和修改字典的键值对。字典通常用于存储和查找键值对,例如一个电话簿或一个词频统计。(哈希表)
集合是一个无序的,不重复的元素集。基本功能包括关系测试和消除重复元素。集合对象还支持union(联合),intersection(交),difference(差)和symmetric difference(对称差集)等数学运算。
list作为Python中最常用的数据结构之一,与其他编程语言的数组有相似的特点,但是它具有着更为强大的功能,接下来将详细地为大家介绍一下list的所有操作。
(注:tuple元组类型与list类似,但是tuple的元素不能修改;set集合与list也类似,但是集合中的元素是无序的,且会自动除去重复元素)
a = []
a = list()
a = [1,2,3]
a = [i for i in range(1, 11)]
#创建一个元素分别为1,2,...10的列表
a = [i for i in range(1, 11) if i % 2 == 0]
#创建一个1-10,且元素为偶数的列表
list('ab c') #列表为['a', 'b', ' ', 'c']
直接用中括号[ ]索引其下标即可,或用for循环遍历所有的值
a = [1,2,3]
print(a[1]) #输出2,因为一个list列表的下标从0开始,按照0, 1, 2,...的顺序排列
print(a[-1]) #输出3
for i in a:
print(i) #输出1 2 3
a = {"one":1, "two":2}
for i in a.values():
print(i) #输出1 2
a.get(key, default) #default_value不设置的话默认为None,设置的话即如果找不到则返回default设定的值
用[左边界下标:右边界下标:步长]截取list中特定的一段,注意是左闭右开的区间,即包含左边界,但是不包含右边界
其中:步长可以省略,默认为1。步长即每次截取一个元素,到下一次截取元素距离几个元素(默认为1,即紧挨着截取)
a = [1,2,3,4,5]
print(a[1:3]) #输出[2,3]
print(a[:4]) #输出[1,2,3,4]
print(a[2:]) #输出[3,4,5]
print(a[2:10] #输出[3,4,5]
print(a[0:3:2]) #输出[1,3]
print(a[2:0:-1]) #输出[3,2]
del(list1[index]) #删除list1中index位置的元素(index也可以表示一个范围,如[1, 3])
a = list1.pop(index) #将list1中index位置元素剔除并赋值给a,默认删除最后一个元素
list1.remove(value) #删除list中值为value的元素
list1.clear() #清空list1的全部内容
list1 = [1, 2, 3, 4, 5] list1[2:] = [] list1 # 输出[1, 2]
a = [1, 2]
b = [3]
c = a + b
那么c = [1, 2, 3]
list1.extend(list2) #在list1后面接上list2
可以将一个列表直接乘一个数字n获得n倍重复后的列表,相当于n个这样的列表连接起来
a = [0]
b = a * 5
那么b = [0, 0, 0, 0, 0]
a = [1, 2, 3, 4, 5]
b = 2
print(b in a)
# 输出True
print(b not in a)
# 输出False
若in前面的元素在列表中则运算值为真;否则为假 not in与in刚好相反
len([1, 2, 3]) #列表的长度为3
max([1, 2, 3]) #最大值为3
list1.append(5) #在list1的最后插入元素5
list1.insert(index, data) #在指定位置(index处)插入元素data
extend()
函数在尾部扩展一个新列表list1 = [1]
list1.extend([2, 3]) # list1为[1, 2, 3]
set1.add(2) #向集合中加入元素2
list1.reverse() #翻转整个列表,即第一个与最后一个互换,第二个与倒数第二个互换....
times = list.count(x)
语法:index(X) 查找list中元素X的位置(若重复出现,则以第一次出现的为准)
a = [1, 2, 3, 4, 5]
a.index(2) #结果为1
list2 = list1.copy() #将list1的内容复制给list2
#注意这里与list2 = list1是有区别的,python中列表的直接赋值是一个传址操作,即改变list2的值也会同时影响list1的值
#但是copy函数进行的是一个传值操作,即改变list2的值对list1无影响
#浅复制的意思是若列表中嵌套一个列表,则对内部的列表仍然是传址复制
sort
方法参数:
key
:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。(https://www.runoob.com/python/att-list-sort.html)reverse
:是否降序(True为降序,不指定该参数为升序)list1 = [(1,6),(3,4),(2,5)]
list1.sort(key=lambda x:x[1], reverse=True) # 根据第二个元素,降序排列
# 输出:[(1, 6), (2, 5), (3, 4)]
sorted()
函数:与sort
方法功能类似,但是sorted()
函数有返回值,返回的是排序后的结果。
字典与列表最大的区别就是字典强调的是“键值对”,key与value一一对应,字典中的存放顺序并不重要,重要的是“键”和“值的对应关系”
a = {key1:value1, key2:value2} # 第一种
a = dict(key1=value1, key2=value2) # 第二种,注意此种情况下键必须为字符串
a = {}
a[key1] = value1
a[key2] = value2 # 第三种
a = dict([(key1, value1), (key2, value2)]) # 第四种
a = dict(zip([key1, key2], [value1, value2])) # 第四种衍生,使用zip函数把键列表和值列表打包成键值对一一对应的元组(即第四种方法)
a = dict.fromkeys([key1, key2], value) # 第五种,这种情况适用于多个键对应相同值的情况
a = {x: x**2 for x in [1, 2, 3]} # 第六种,字典推导表达式
dict1[key]
#key是字典的键,返回的是对应的值value
dict1.get(key)
#get方法获取键的值,若键不存在,则返回设定的默认值default(默认为None)--与`[key]`获取值的区别是,get方法遇到键不存在的时候会返回设定值,而直接索引遇到键不存在时会报错“missing-key”
for i in dict1.keys():
print(i, dict1[keys]) # 遍历字典中所有的键,并输出键值对
for i in dict1: # 该方法与上述方法等价
...
for keys, values in dict1.items(): # 遍历字典中所有的键值对
...
对字典的排序有两种方法:
1.借助.keys()
方法和list()
函数将键提取成list,对list排序后输出
# Example
D = {'a':1, 'c':3, 'b':2}
D1 = list(D.keys())
D1.sort()
for i in D1:
print(i, D[i])
# 输出:
# a 1
# b 2
# c 3
2.借助内置的sorted()
函数可对任意对象类型排序,返回排序后的结果
tips:对于sorted(字典)来说,返回的是排序好的keys(以list的形式)
# Example
D = {'a':1, 'c':3, 'b':2}
for i in sorted(D):
print(i, D[i])
# 输出:
# a 1
# b 2
# c 3
| 操作 | 解释 | | --------------------- | ------------------------------------------------------------ | | .keys()
| (方法)获取所有键 | | .values()
| (方法)获取所有值 | | .items()
| (方法)获取所有“键+值”元组 | | len()
| 获取键值对的数量 | | .get(key, default) | (方法)获取键的值,若键不存在,则返回设定的默认值default(默认为None)--与[key]
获取值的区别是,get方法遇到键不存在的时候会返回设定值,而直接索引遇到键不存在时会报错“missing-key” | | dict1.update(dict2)
| (方法)合并两个字典 |
元组类似于列表,是一个基于位置的有序对象集合,但是元组一旦创建之后就不能更改,因此列表中修改元素的操作对于元组都不适用。
元组和其他不可变量类似于其他语言中“常量”的声明,它的不可变性提供了某种一致性,这样可以确保元组在程序中不会被另一个引用修改。
Mark Lutz——《Learning Python》中文版
t = (1, 2, 3)
t = tuple([1, 2])
...
特别说明,当元组中仅有一个元素时,要以逗号结尾。这是因为小括号同样可以把表达式括起来,为了与此区分开来,因此在单一对象元组是要在括号内加一个,
用以区分。
t = (1) # 表达式
t = (1,) # 元组
由于元组并不能够像列表一样修改,因此元组并没有特别多的方法
>>> t = (1, 2, 3, 1, 2)
# index方法:根据元素找到其位置
>>> t.index(1, 2) # 寻找第2个元素1的位置
3
# count方法:返回元素的个数
>>> t.count(2)
2
namedtuple
-有名元组python标准库的collections模块提供了namedtuple
有名元组,实现了同时支持使用序号和属性名访问。有名元组的属性来自类,因此并不与字典的键完全一样,但他们方便记忆:
>>> from collections import namedtuple
>>> A = namedtuple('tt', ['a','b','c'])
>>> bon = A('d','e','f')
>>> bon
tt(a='d', b='e', c='f')
# namedtuple的访问:
>>> A = namedtuple('tt', ['a','b','c'])
>>> bon = A('d','e','f')
>>> bon
tt(a='d', b='e', c='f')
Python中的集合类似于数学中的集合概念,它是一组无序、不可重复数据的组合。集合用{ ...}创建,某种程度上可以把集合看作是没有值的字典。
s = {'s', 'e', 't'}
s = set(['a, b, c, d, e'])
#注意,python中{}为空字典类型,并非空集合。空集合需要用set()函数创建
s = set() #创建一个空集合
#集合也可以用表达式(推导)的方式创建
{x * 2 for x in 'abc'} #{'aa', 'bb', 'cc}
{x **2 for x in range(1,5)} #{1, 4, 9, 16}
set1 `&` set2 #交运算
set1 `|` set2 #并运算
set1 `-` set2 #差运算,set1减去set1 `&` set2部分
set1.add('x') #添加元素。注意:集合中只能包含可哈希的对象,即list,dict都不能嵌入到集合中
set1.union(...) #取并集,效果等同于 | ,但是括号里可以是list,tuple,其他dict甚至是dict
set1.intersection(...) #取交集,同上
set1.issubset(set2) #判断set1是否是set2的子集
注意:集合只能包含不可变的(可哈希化的)对象类型。因此,列表和字典甚至另一个集合都不能作为集合的元素,但是元组可以(因为元组是不可变的)。
由于集合本身是可变的,因此,要想在一个集合中嵌入另一个集合,需要用frozenset创建一个不可变的集合。
a = frozenset([1, 2, 3])
b = set([1, 2, a]) #b为{frozenset({1, 2, 3}), 1, 2}
上一篇:python 列表操作常用函数
下一篇:用逗号分陋输出列表元素
五年级上册解方程练… | 255459 |
九连环图解解法 | 226897 |
wifi万能钥匙破解的… | 177864 |
纸飞机Skyking(空… | 170850 |
小学语文知识大全(… | 152078 |
各种鱼钩鱼线绑法与… | 117022 |
课题研究的方法有哪些 | 113473 |
人教版pep小学英语… | 104573 |
小学语文知识大全(… | 96819 |
人教版pep小学英语… | 96216 |
小学数学五年级上册… | 93452 |
人教版pep小学英语… | 82590 |
小学语文知识大全(… | 80415 |
笔记本电脑如何关闭… | 79827 |
小学生六一搞笑小品… | 78893 |
不打结的红领巾系法… | 78085 |