知识点
- 列表的方法与列表元素的删除
- 将列表用作栈和队列
- 列表推导式
- 元组、集合、字典的创建与操作
- enumerate() 和 zip() 函数
列表的方法
先简要罗列几个:append insert count remove reverse sort
-
del arrName[index]
:删除指定位置的列表元素 -
a.extend(b)
:将列表b中的所有元素添加到列表a的最后面
将列表用作栈和队列
-
a.pop()
:将列表a的最后一个元素弹出 -
a.pop(i)
:将列表a的第i个元素弹出 -
a.append(num)
:将数字num拼接到列表a的最末
列表推导式
原始创建列表方法
>>> squares = []
>>> for x in range(10):
... squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
高级用法:
squares = list(map(lambda x: x**2, range(10)))
列表推导式:
squares = [x**2 for x in range(10)]
结合两个列表的列表推导式
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
列表推导式也可以嵌套
>>> a=[1,2,3]
>>> z = [x + 1 for x in [x ** 2 for x in a]]
>>> z
[2, 5, 10]
元组
元组是由数个逗号分割的值组成,并且元组是
不可变类型
,这意味着不能在元组内删除或添加或编辑
任何值。
# 元组的创建
>>> a = 'Fedora', 'ShiYanLou', 'Kubuntu', 'Pardus'
>>> a[1]
'ShiYanLou'
>>> for x in a:
... print(x, end=' ')
...
Fedora ShiYanLou Kubuntu Pardus
#对任何一个元组执行拆封操作并赋值给多个变量
x, y = divmod(15,2)
要创建只含有一个元素的元组,在值后面跟一个逗号。
>>> a = (123)
>>> a
123
>>> type(a)
<class 'int'>
>>> a = (123, )
>>> b = 321,
>>> a
(123,)
>>> b
(321,)
>>> type(a)
<class 'tuple'>
>>> type(b)
<class 'tuple'>
集合
集合是一个
无序不重复元素
的集。基本功能包括关系测试和消除重复元素。集合对象还支持 union(联合),intersection(交),difference(差)和 symmetric difference(对称差集)等数学运算。
大括号或 set() 函数可以用来创建集合。注意:想要创建空集合,你必须使用 set()
而不是 {}。后者用于创建空字典
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # 你可以看到重复的元素被去除
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket
True
>>> 'crabgrass' in basket
False
>>> # 演示对两个单词中的字母进行集合操作
...
>>> 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'}
从集合中添加或弹出元素
>>> a = {'a','e','h','g'}
>>> a.pop() # pop 方法随机删除一个元素并打印
'h'
>>> a.add('c')
>>> a
{'c', 'e', 'g', 'a'}
字典
字典是是
无序的键值对
(key:value)集合,同一个字典内的键必须是互不相同的。一对大括号 {} 创建一个空字典。
>>> data = {'kushal':'Fedora', 'kart_':'Debian', 'Jace':'Mac'}
#创建新的键值对
data['parthan'] = 'Ubuntu'
# del 关键字删除任意指定的键值对
del data['kushal']
# 使用 in 关键字查询指定的键是否存在于字典中
'ShiYanLou' in data
# dict() 可以从包含键值对的元组中创建字典
>>> dict((('Indian','Delhi'),('Bangladesh','Dhaka')))
{'Indian': 'Delhi', 'Bangladesh': 'Dhaka'}
#遍历字典
>>> for x, y in data.items():
... print("{} uses {}".format(x, y))
字典中的键必须是不可变类型,比如不能使用列表作为键。
字典中的元素添加数据:首先要判断这个元素是否存在,不存在则创建一个默认值。如果在循环里执行这个操作,每次迭代都需要判断一次,降低程序性能。可以使用dict.setdefault(key, default)
更有效率的完成这个事情。
>>> data = {}
>>> data.setdefault('names', []).append('Ruby')
>>> data
{'names': ['Ruby']}
>>> data.setdefault('names', []).append('Python')
>>> data
{'names': ['Ruby', 'Python']}
>>> data.setdefault('names', []).append('C')
>>> data
{'names': ['Ruby', 'Python', 'C']}
试图索引一个不存在的键将会抛出一个 keyError 错误。我们可以使用 dict.get(key, default)
来索引键,如果键不存在,那么返回指定的 default 值
>>> data['foo']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'foo'
>>> data.get('foo', 0)
0
enumerate()
:遍历列表时,同时获得元素索引值
>>> for i, j in enumerate(['a', 'b', 'c']):
... print(i, j)
...
0 a
1 b
2 c
zip()
:同时遍历两个序列类型
>>> a = ['Pradeepto', 'Kushal']
>>> b = ['OpenSUSE', 'Fedora']
>>> for x, y in zip(a, b):
... print("{} uses {}".format(x, y))
...
Pradeepto uses OpenSUSE
Kushal uses Fedora
程序示例
- 判断学生成绩是否达标的程序
student.py
#!/usr/bin/env python3
n = int(input("Enter the number of students: "))
data = {} # 用来存储数据的字典变量
Subjects = ('Physics', 'Maths', 'History') # 所有科目
for i in range(0, n):
name = input('Enter the name of the student {}: '.format(i + 1)) # 获得学生名称
marks = []
for x in Subjects:
marks.append(int(input('Enter marks of {}: '.format(x)))) # 获得每一科的分数
data[name] = marks
for x, y in data.items():
total = sum(y)
print("{}'s total marks {}".format(x, total))
if total < 120:
print(x, "failed :(")
else:
print(x, "passed :)")
- 计算两个矩阵的 Hadamard 乘积
matrixmul.py
#!/usr/bin/env python3
n = int(input("Enter the value of n: "))
print("Enter values for the Matrix A")
a = []
for i in range(n):
a.append([int(x) for x in input().split()])
print("Enter values for the Matrix B")
b = []
for i in range(n):
b.append([int(x) for x in input().split()])
c = []
for i in range(n):
c.append([a[i][j] * b[i][j] for j in range(n)])
print("After matrix multiplication")
print("-" * 7 * n)
for x in c:
for y in x:
print(str(y).rjust(5), end=' ') #返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
print()
print("-" * 7 * n)
运行如下:
image.png
网友评论