前几天有人问我这些的区别是什么,我愣了一下,刚好今天重新过一遍数据结构,也就顺便整理一下了
元组:
是由数个逗号分割的值组成: a = 'jks','sss','ssa','wdd' print(a[1])
元组是不可变类型,这意味着你不能在元组内删除或添加或编辑任何值。
>>> a = (1, 2, 3, 4)
>>> del a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
要创建只含有一个元素的元组,在值后面跟一个逗号。
以上呢元组的概念
集合:
集合是一个无序不重复元素的集。大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set() 而不是 {}
如果集合中有一样的元素,例如两个'bbb',最后print出来的都会删除多余的元素。
当然以下是借用蓝桥云课免费版的教学引用
a = set('abracadabra')
>>> b = set('alacazam')
>>> a # a 去重后的字母
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # a 有而 b 没有的字母
{'r', 'd', 'b'}
>>> a | b # 存在于 a 或 b 的字母
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # a 和 b 都有的字母
{'a', 'c'}
>>> a ^ b # 存在于 a 或 b 但不同时存在的字母
{'r', 'd', 'b', 'm', 'z', 'l'}
除此之外,可以用集合的名字.pop()随机打印出来一个元素,并删除 集合的名字.add('s')可以在集合里面添加一个新的元素.
列表
>>> a = [11, 25, 1111, -3434, 1116, 234]
>>> a.append(45)
>>> a
[11, 25, 1111, -3434, 1116, 234, 45]
还可以用
a.insert(0, 1111) #在列表索引 0 位置添加元素 1111
还有很多函数
a.count() #意思是去检测某一个数字在列表中出现的个数
a.remove() #可以删除一个元素
a.reverse #翻转列表
a.extend(b) #将b元素添加进a元素
栈
栈是我们通常所说的一种 LIFO (Last In First Out 后进先出)数据结构。它的意思是最后进入的数据第一个出来。一个最简单的例子往一端封闭的管道放入一些弹珠然后取出来,如果你想把弹珠取出来,你必须从你最后放入弹珠的位置挨个拿出来。
>>> a = [1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
>>> a.pop()
6
>>> a.pop()
5
>>> a.pop()
4
>>> a.pop()
3
>>> a
[1, 2]
>>> a.append(34)
>>> a
[1, 2, 34]
上面的代码中我们使用了一个新方法 pop()。传入一个参数 i 即 pop(i) 会将第 i 个元素弹出。
在我们的日常生活中会经常遇到队列,比如售票窗口、图书馆、超市的结账出口。队列 是一种在末尾追加数据以及在开始弹出数据的数据结构。与栈不同,它是 FIFO (First In First Out 先进先出)的数据结构。
>>> a = [1, 2, 3, 4, 5]
>>> a.append(1)
>>> a
[1, 2, 3, 4, 5, 1]
>>> a.pop(0)
1
>>> a.pop(0)
2
>>> a
[3, 4, 5, 1]
字典
字典是无序的键值对(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。初始化字典时,在大括号内放置一组逗号分隔的键:值对,这也是字典输出的方式。我们使用键来检索存储在字典中的数据。
>>> a = {'ssss':'121', 'jks' :'sqs', 'usbn':'1sqz'}
>>> a
{'ssss': '121', 'jks': 'sqs', 'usbn': '1sqz'}
>>> a['ssss']
'121'
>>> del a['jks']
>>> a
{'ssss': '121', 'usbn': '1sqz'}
>>> '121' in a
False
a
{'ssss': '121', 'usbn': '1sqz'}
>>> for x,y in a.items():
... print("{} to {}".format(x,y))
...
ssss to 121
usbn to 1sqz #可以用items()函数进行遍历字典
许多时候我们需要往字典中的元素添加数据,我们首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。
我们可以使用 dict.setdefault(key, default) 更有效率的完成这个事情。
>>> b = {}
>>> b
{}
>>> b.setdefault('aaa',[]).append('1111')
>>> b
{'aaa': ['1111']}
>>> b.setdefault('aaa',[]).append('klj')
>>> b
{'aaa': ['1111', 'klj']}
试图索引一个不存在的键将会抛出一个 keyError 错误。我们可以使用 dict.get(key, default) 来索引键(例如a.get()),如果键不存在,那么返回指定的 default 值。
>>> b
{'aaa': ['1111', 'klj']}
>>> b['aaaa']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'aaaa'
>>> b.get('aaaa',0)
0
如果你想要在遍历列表(或任何序列类型)的同时获得元素索引值,你可以使用 enumerate()。也许需要同时遍历两个序列类型,你可以使用 zip() 函数
>>> for i, j in enumerate(['a', 'b', 'c']):
... print(i, j)
...
0 a
1 b
2 c
>>> a = ['Pradeepto', 'Kushal']
>>> b = ['OpenSUSE', 'Fedora']
>>> for x, y in zip(a, b):
... print("{} uses {}".format(x, y))
...
Pradeepto uses OpenSUSE
Kushal uses Fedora
接下来会有练习
这是一个判断学生成绩是否达标的程序,要求输入学生数量,以及各个学生物理、数学、历史三科的成绩,如果总成绩小于 120,程序打印 “failed”,否则打印 “passed”。
n = int(input("Enter a number of students: ")) ##输入学生的数量,只能是整数
data = {} ##用来储存数据的字典变量
sub = ('physics', 'math', 'history') ##科目
for i in range(1,n+1):
name = input('Enter students name{}: '.format(i))
marks = [] ##列表,储存成绩的
for x in sub: #给三个科目赋予成绩
marks.append(int(input('Enter marks {}:'.format(x)))) #将输入的成绩加入到marks 列表之中
data[name] = marks #学生数据储存到data字典
for x, y in data.items(): #遍历字典
total = sum(y) #sum() 函数会将传入的列表进行加和。
print("{}'s total marks is {}".format(x, total))
if total < 120:
print(x, "failed")
else:
print(x, "passed")
如果想增添如果输入成绩大于一个数字(例如100分)),则报错并退出程序的功能
n = int(input("Enter a number of students: ")) # 输入学生的数量,只能是整数
data = {} # 用来储存数据的字典变量
sub = ('physics', 'math', 'history') # 科目
for i in range(1, n + 1):
name = input('Enter student\'s name {}: '.format(i))
marks = [] # 列表,储存成绩的
for x in sub: # 给三个科目赋予成绩
mark = int(input('Enter marks for {}: '.format(x)))
if mark > 100:
print("Invalid input: marks cannot be greater than 100.")
exit()
marks.append(mark) # 将输入的成绩加入到marks列表之中
data[name] = marks # 学生数据储存到data字典
for x, y in data.items(): # 遍历字典
total = sum(y) # sum() 函数会将传入的列表进行加和。
print("{}'s total marks are {}".format(x, total))
if total < 120:
print(x, "failed")
else:
print(x, "passed")
1 条评论
?