python 入门学习笔记 2018.7.15 列表和元组
Edward=['Edward Smith',42];
lucas=['Wenny Lucas',20];
Database=[Edward,lucas];
print(Database)
以上是序列的最基本操作
显示结果会是
[['Edward Smith', 42], ['Wenny Lucas', 20]]
这是一个名为Database的序列,且序列中有两个元素,分别为Edward 和 Lucas
而如果操作为
print(Database[0])
则会只输出第一个元素的内容
这就是列表的索引
而Python支持反向索引,即列表的最后一位编号为-1, 倒数第二位为-2,以此类推
字符串字面值能直接使用索引,如
print(‘Hello’[1])
输出
e
当函数结果返回序列是,可以直接对返回结果进行操作,如
input('Year:')[3]
2.2 分片
利用分片可访问一片范围内的元素,如
lucas='https://www.youtube.com/';
print(lucas[5:9])
输出为
://w
需要注意的是,分片的第一个数字代表的元素在表示范围内,而最后一个数字代表的则不在
最后的数字因此可以是超越边界的,且超越边界的数字显示出的内容相同
print(lucas[5:24])
print(lucas[5:26])
两句的输出为
://www.youtube.com/
://www.youtube.com/
捷径!
要使分片的输出结果包含结尾的元素,空置分片后一个索引即可
print(lucas[5:])
输出结果与上文相同这种方法同样适用于开头的元素,尽管与将前一个索引置为0无异
print(lucas[:7])
print(lucas[0:7])
空置两端的索引,则会输出整个序列
实例:url的提取
#对http://www.baidu.com的域名进行提取
url=input('Enter the url:');
domain=url[11:-4]
print('Domain name:'+domain)
Enter the url:http://www.baidu.com
Domain name:baidu
与本人在mips指令中不同,分片的步长同样能进行设置,但是设置步长的数被放置在的两个索引的后面,例如
domain=url[11:-4:2]
输出为
biu
而当步长设置为负数时,将从右向左提取元素
特别注意,不能简单的直接将两个索引的数字取负数,而要注意索引的开始数字和结束数字分别是取和不取的
domain=url[-5:10:-2]
输出
uib
2.3 序列相加
只有相同类型的序列才能相加,如
[1,2,3]+[4,5,6]
[1,2,3,4,5,6]
而
[1,2,3]+'Hello'
则会报错
2.4 乘法
将序列乘以一个数n将会得到一个新的将该序列重复n次的序列
而当我们想要创立一个空的列表但是该列表却占用10个长度的空间时该怎么办?
这时可以使用None
None为Python内部的内建值,代表着空的空间,因此初始化一个10长度列表可以写为
sequence=[None]*10
print(sequence)
输出为
[None, None, None, None, None, None, None, None, None, None]
2.5 成员资格
sequence='abcdefg';
print('cd' in sequence)
输出值为true
而若将'cd'改为'cg'则就会返回false了
不仅仅是字符串能够接受查询,序列也能够接受,例如
sequence=['lucas','edward','astralis']
print('lucas' in sequence)
true
sequence=['lucas','edward','astralis']
name=input('Name:');
if(name in sequence):print('Yes')
Yes
2.6 长度、最小最大值
len, min 和max三种函数
len函数返回序列中元素的数量
min|max 函数返回序列中最小和最大的元素
sequence=['lucas','edward','astralis']
print(len(sequence))
3
>>>sequence=[1,2,3,4,5]
>>>print(len(sequence))
>>>print(min(sequence))
5
1
3.1 list函数
将字符串拆开为单个字符组成的序列,可以使用list函数
>>>list('Hello')
['H','e','l','l','o']
3.2 列表操作
列表赋值
>>x=[1,1,1]
>>x[1]=2;
>>>print(x)
[1,2,1]
删除元素
del 语句
sequence=[1,2,3,4,5]
del sequence[3];
print(sequence)
[1,2,3,5]
该元素完全消失,并且数组长度也减少了一个单位
分片赋值
name=list('peak');
name[2:]=list('ar')
print(name)
['p', 'e', 'a', 'r']
并且赋值时还能插入新的元素,比如上方的例子中
name=list('peak');
name[2:2]=list('ar')
print(name)
['p', 'e', 'a', 'r', 'a', 'k']
3.3 列表方法
1) append
利用append()函数将元素添加到列表的尾部
>>>1st=[1,2,3];
>>>1st.append(5);
>>>1st
[1,2,3,5]
2) count
count()函数用于统计在列表中元素出现的次数
>>name=['a','a','b','f','k'];
>>p=name.count('b')
>>print(p)
1
3) extend
extend()函数用于拓展现有的列表
它能够在现有列表的末尾一次性添加另一个序列的多个值
>>name=['a','a','b','f','k'];
>>name.count('b')
>>name_2=['A','B','C'];
>>name.extend(name_2)
>>print(name)
>>print(name_2)
['a', 'a', 'b', 'f', 'k', 'A', 'B', 'C']
['A','B','C']
值得注意的是,extend会改变原来的列表的内容
而对于列表的相加,它对原来的两个列表的值都不会进行改变,只会返回一个合并值
>>name=['a','a','b','f','k'];
>>name_2=['A','B','C'];
>>print(name+name_2);
>>print(name);
>>print(name_2)
name=['a','a','b','f','k'];
name_2=['A','B','C'];
print(name+name_2);
print(name);
print(name_2)
这种操作实际上是创建了两个原来的列表的副本,因此
a=a+b的效率并没有a.extend(b)高
4) index
index()可以返回列表中的第一个匹配项的位置
>>a=[6,6,5,7,'u','p'];
>>a.index('u')
6
5)insert
正如其名,insert()函数就是用来向列表中插入新的元素。函数参数包括所想要插入的位置以及插入的元素。
>>name=['a','b','c','d','e','f']
>>name.insert(3,'G')
>>print(name)
['a','b','c','G','d','e','f']
6)pop
pop类似于栈的操作,移除列表中的元素(默认最后一个),并返回该元素的值
函数参数可以选择移除的元素的位置
>>name=[1,2,3,4,5]
>>name.pop();
>>print(name)
[1,2,3,4]
5
把pop()和append()函数合在一起能实现栈的效果,后进先出
>>name=[1,2,3,4]
>>name.append(name.pop())
>>print(name)
[1,2,3,4]
7)remove
remove()能删除列表中的指定元素
>>x=[1,2,3]
>>x.remove(2)
>>print(x)
[1,3]
8) reverse
reverse()函数能将列表中的元素反向存放
9)sort
sort()函数能将列表元素进行排序然后存放。注意,当我们想要一个存放着排序后的列表时,下面方法
>>x=[1,4,2,8,5,7]
>>y=x.sort()
>>print(y)
None
>>y=x
>>y.sort()
>>print(y)
[1,4,2,8,5,7]
是不可取的。而替代方法有两种,一种是创建新的字符串再复制原字符串到这个新字符串,最后再对新的字符串进行sort操作。
或者,使用sorted()函数,如下所示
>>x=[1,2,4,5,3]
>>y=sorted(x)
>>print(y)
[1,2,3,4,5]
10) 高级排序
可以使用compare()函数来自定义排序方式,也可以用cmp()来进行默认排序。sort函数可以有两个参数,分别是key和reverse
>>x=[1,4,2,8,5,7]
>>x.sort(reverse=True)
>>x
[7,5,8,2,4,1]
>>y=['a','acd','ab']
>>y.sort(key=len)
>>y
['a','ab','acd']
4. 元组
元组是一个不可变的序列,与列表类似,但是元组的元素不能被修改。创建元组需要在元素的后面加一个逗号,如
>>1,2,3
(1,2,3)
>>(1,)
(1,)
>>()#空元组
()
>>3*(1,)
(1,1,1)
4.1 tuple函数
与list函数类似,将一个序列作为参数并转换为元组
1,2,3,4
>>tuple([1,2,3])
(1,2,3)
>>tuple('hape')
('h','a','p','e')
4.2 元组的基本操作
>>x=(1,2,3)
>>x[1]
2
>>x[:1]
(1)