Python列表和元组

1.序列的概览

Python的编号和别的语言差不多从0开始,这样做也可以从最后一个元素开始计数:-1为倒数第一,-2为倒数第二

Python有6中内建序列,列表,元组,字符串,Unicode字符串,buffer对象和xrange对象。本章重点是列表和元组。列表和元组的主要区别在于,列表可以修改,元组则不能修改。

注意:Python之中还有一种容器的数据结构。容器基本上是包含其他对象的任意对象。序列(例如列表和元组)和映射(例如字典)是两类主要的容器。还有集合(set)既不是序列也不是映射的容器类型。

2.通用序列操作

2.1索引

字符串就是一个由字符组成的序列,缩影0指向第一个元素。(相当于C语言里的数组,但是更强大,更灵活)
greeting = 'hello'
greeting[0]
'h'
#这就是索引

如果一个函数调用返回一个序列,也可以对这个序列返回结果进行索引操作:
fourth = input ('year:')[3]
fourth
year:2005
Out[27]:
'5'

2.2切片

1.切片相当于更高级的索引,可以访问一定范围内的元素。分片通过冒号隔开的两个索引来实现
greeting = 'hello'
print(greeting[1:-1])
print(greeting[1:5])
ell
ello
#可以看出,第一个索引是元素在分片内的,而第二个则不包含在分片内(左闭右开)注意第二个,如果切片的逻辑错位,将返回一个空列表。

2.进行切片的时候,分片的开始和结束点需要进行指定(不管间接还是直接)。而还有另一个参数,步长(默认为1)。分片操作就是按照步长逐个遍历序列的元素,然后返回开始和结束点的所有元素。步长为正从左至右提取元素(左开右闭),步长为负从右到左提取元素(右开左闭)。

3.序列相加:相同类型的序列方可连接在一起,列表和字符串就无法联系在一起。
'hello'+'world'
'helloworld'
#此相加非彼相加,数学上的参考 数组的相加

4.乘法:一个数字X乘以一个序列会产生一个新的序列,而在新的序列中,原来的序列将会被重复X次。

5.成员资格:为了检查一个值是否在序列中,可以使用in运算符,这个运算符检查某个条件是否为真,返回True,False(注意大小写,并且为布尔值)
user =['zhao','qian','sun','li']
input('enter your use name:') in user
enter your use name:zhou
False

3.列表

3.1简单介绍

因为字符串不能修改,所以根据字符串创建的列表会很有用。
list("hello")
['h', 'e', 'l', 'l', 'o']
#可以用join将字符组成的列表转换成字符串,参考字符串方法

列表可以使用所有适用于列表的标准操作,例如索引和分片等,但是列表是可以修改的。

分片复试语句可以在不需要替换任何原有的元素的情况下插入新的元素
name = [1,6,5]
name[1:2] = [2,3,4]
print (name)
[1, 2, 3, 4, 5]
#这个程序相当于“”替换“了一个空的分片。以此类推,通过分片复制空语句来删除元素也是可行的

3.2列表方法

-append
***.append(元素)相当于在列表的末尾加入一个元素
注意:append方法和其他的方法类似,只是在恰当位置修改原来的列表。这意味着,他不是简单的返回一个修改过的新列表——而是直接修改原来的列表。

-extend
用法类似append,但是这个可以在末尾一次追加多个元素。这个操作看起来很像连接操作,但extend方法修改了被扩展的序列。而连接操作则是返回一个全新的列表。
a = [1,2,3]
b = [1,2,3]
c = [4,5,6]
a.extend(c)
print (b + c)
print (a)
print (b)
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
[1, 2, 3]
#l连接的效率比extend低

-count
统计某个元素在列表中出现的次数:
['to','be','or','not','to','be'].count('to')
2
#也可以是其他的列表等元素

-index
这个方法用于从一个列表中找出某个值的第一个索引位置(那么多个呢?)
print (a.index(3))
print (a.index(8))
2
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-12-8b006a77aea6> in <module>()
      1 print (a.index(3))
----> 2 print (a.index(8))

ValueError: 8 is not in list
#可以看出当一个元素不在列表中的时候,会引发一个异常而不是返回False。

-remove
用于移除列表中值得第一个匹配项
print (['to','be','or','not','to','be'].remove('to'))
#可以看出这个方法没有返回值


-insert
用于将对象插入到列表中,接受两个参数,一个是索引,一个是元素
a =[1,2,3,4,5,6]
a.insert(6,'seven')
print (a)
[1, 2, 3, 4, 5, 6, 'seven']
#竟然可以实现末尾插入的功能!!!我想他应该是在索引值-1的位置开始插入,而不是查表插入。这种操作也可以用分片赋值来实现

-pop
pop方法是唯一一个既能修改列表又返回元素值得列表方法
a =[1,2,3,4,5,6]
print (a.pop())
6

-reverse
将列表中的元素反向存放
a =[1,2,6,3,5,3]
print (a.reverse())
print (a)
None
[3, 5, 3, 6, 2, 1]

-sort
用于在原位置对列表进行排序,而不是返回一个已排序的列表副本
a =[1,2,6,3,5,3]
print (a.sort())
print (a)
None
[1, 2, 3, 3, 5, 6]
#注意返回的是空值,避免进行赋值操作

1.如果想要保留副本,然后再排序可以参考以下方法:
a = [1,2,6,3,5,3]
b = a[:]
b.sort()
print (a,'\n',b)
[1, 2, 6, 3, 5, 3] 
 [1, 2, 3, 3, 5, 6]
请对比以下做法:
a = [1,2,6,3,5,3]
b = a
b.sort()
print (a,'\n',b)
[1, 2, 3, 3, 5, 6] 
 [1, 2, 3, 3, 5, 6]

2.另一个获取已排序列表副本的方法是,使用sorted函数
a = [1,2,6,3,5,3]
b = sorted(a)
print (a,'\n',b)
[1, 2, 6, 3, 5, 3] 
 [1, 2, 3, 3, 5, 6]
#这个函数实际上可以用于任何序列,但总是返回一个列表
name = 'python'
print (sorted(name))
['h', 'n', 'o', 'p', 't', 'y']

如果想把一些元素按相反的顺序排序,可以先使用sort(或者sorted),然后再调用reverse方法。

sort 有两个可选参数key和reverse。
name = ['z','qi','sun','zhou']
name.sort(key = len)
print (name)
['z', 'qi', 'sun', 'zhou']

a = [1,2,6,3,5,3]
a.sort(reverse = True)
print (a)
[6, 5, 3, 3, 2, 1]
 #注意与单独的reverse方法的区别
#python3取消了cmp函数, 详细信息

4.元组:不可变序列

元组也是一种序列,类似列表,但是他不可更改。元组大部分的时候是通过圆括号括起来的。 如果元组内只有一个元素时候,必须加个逗号
a = (1)
b = (1,)
print (a)
print (b)
1
(1,)

tuple函数:将一个序列作为参数并把它转换为元组。
元组的基本操作基本都是参照list

那么元组的意义何在?元组可以在映射(和集合的成员)中当做键使用;元组作为很多内建函数和方法的返回值存在。
其实,一般来讲列表更能满足对序列的所有需求。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值