python学习笔记(2)列表和元组

本篇主要记录些python中列表和元组的笔记。

  1. 序列概述
    python中最基本的数据结构是序列。序列中每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是0,第二个则是1,以此类推。

python有6种内建序列:列表、无组、字符串、Unicode字符串、buffer对象和xrange对象。这里先介绍最常用的两种类型:列表和元组。

列表和元组的主要区别在于:列表可以修改,而无组不能。
列表的各个元素通过逗号分隔,写在方括号中:

>>>edward=['Edward',42]

2、通用序列操作
2.1 索引

>>> greeting='Hello'
>>> greeting[0]
'H'

最后一个元素的位置编号是-1:

>>> greeting[-1]
'o'

字符串字面值也能够直接使用索引:

>>> 'Hello'[1]
'e'

如果一个函数调用返回一个序列,可以直接对返回结果进行索引操作:

>>> fourth=raw_input("Year: ")[3]
Year: 2005
>>> fourth
'5'

2.2 分片
使用分片操作来访问一定范围内的元素:

>>> numbers=[1,2,3,4,5,6,7,8,9,10]
>>> numbers[3:6]
[4, 5, 6]

第1个索引是需要提取部分的第1个元素的编号,最后的索引则是分片后剩下部分的第1个元素的编号,即第1个索引的元素是包含在分片内的,第2个则不包含在分片内。
注:只要分片中最左边的索引比它右边的晚出现在序列中,结果就是一个空的序列,如numbers[-3:0]。如果分片所得部分包括序列结尾的元素,可以走这个捷径:numbers[-3:]

>>> numbers[-3:0]
[]
>>> numbers[-3:]
[8, 9, 10]
>>> 

同样的,序列开始的元素也可以这样:

>>> numbers[:3]
[1, 2, 3]

要取整个序列:

>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

分片也可以设置步长:

>>> numbers[0:10:2]
[1, 3, 5, 7, 9]

意思为:按步长2取索引为0到9的数。
步长不能为0,但是可以为负数,即从右往左取:

>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[8:3:-1]
[9, 8, 7, 6, 5]

2.3 序列相加
使用加号进行序列的连接,而不是对应数值的加法运算:

>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]

注:列表和字符串是无法连接到一起的,即只有两种相同类型的序列才能进行连接操作。

2.4 乘法
用数字x乘以一个序列,表示将序列重复x次:

>>> ['python']*5
['python', 'python', 'python', 'python', 'python']
>>> 

2.5 空列表初始化

>>> sequence=[None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
>>> sequence[0]
>>> 

表示sequence是一个长度为10的空列表。

2.6 判断某值是否存在序列中
检查一个值是否在序列中,使用in运算符,为真返回True,假返回False.

>>> permissions='rw'
>>> 'w' in permissions
True
>>> 't' in permissions
False

2.7 序列的长度、最大值、最小值

>>> numbers=[100,34,678]
>>> len(numbers)
3
>>> max(numbers)
678
>>> min(numbers)
34
>>> 

3 列表
列表可以使用所有适用于序列的标准操作,如索引、分片、连接和乘法,但是列表是可变的,可以改变列表的内容。
3.1 根据字符串创建列表

>>> list('List')
['L', 'i', 's', 't']
>>> 

3.2 元素赋值
使用索引标记来为某个特定的、位置明确的元素赋值,以改变列表。

>>> x=[1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
>>> 

注:不能为一个位置不存在的元素进行赋值。
3.3 删除元素

>>> del x[1]
>>> x
[1, 1]
>>>

3.4 分片赋值
使用分片赋值可以使用与原序列不等长的序列将分片替换。

>>> name=list('Perl')
>>> name
['P', 'e', 'r', 'l']
>>> name[2:]='DING'
>>> name
['P', 'e', 'D', 'I', 'N', 'G']
>>> 

分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素:

>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]
>>> 

用分片赋值来删除元素也是可以的:

>>> numbers[1:4]=[]
>>> numbers
[1, 5]
>>> 

3.5 列表的几种方法
(1) append
在列表末尾追加新的对象,直接修改的原来的列表:

>>> numbers
[1, 3, 5]
>>> numbers.append(1)
>>> numbers
[1, 3, 5, 1]
>>> 

(2) count
统计某个元素在列表中出现的次数:

>>> x=[[1,2],1,1,[2,1,[1,2]]]
>>> x
[[1, 2], 1, 1, [2, 1, [1, 2]]]
>>> x[0]
[1, 2]
>>> x.count(1)
2
>>> x.count([1,2])
1
>>> 

(3)extend
在列表的末尾一次性追加另一个序列中的多个值:

>>> numbers
[1, 3, 5, 1]
>>> numbers2=[6,7,8]
>>> numbers.extend(numbers2)
>>> numbers
[1, 3, 5, 1, 6, 7, 8]

(4)index
从列表中找出某个值第一个匹配项的索引位置:

>>> numbers2
[6, 7, 8]
>>> numbers2.index(7)
1
>>> 

(5)insert
将对象插入列表中:

>>> numbers.insert(1,'four')
>>> numbers
[1, 'four', 3, 5, 1, 6, 7, 8]
>>> 

(6) pop
移除列表中的一个元素(默认是最后一个),并且返回该元素的值,pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法。

>>> numbers
[1, 'four', 3, 5, 1, 6, 7, 8]
>>> numbers.pop()
8
>>> numbers
[1, 'four', 3, 5, 1, 6, 7]
>>> numbers.pop(1)
'four'
>>> numbers
[1, 3, 5, 1, 6, 7]
>>> 

使用pop方法可以实现栈,后进先出,入栈和出栈,入栈使用append方法,出栈使用pop方法。

(7) remove
移除列表中某个值的第一个匹配值:

>>> numbers
[1, 3, 5, 1, 6, 7]
>>> numbers.remove(1)
>>> numbers
[3, 5, 1, 6, 7]
>>> 

(8) reverse
将列表中的元素反向存放,改变原来的列表值:

>>> numbers
[3, 5, 1, 6, 7]
>>> numbers.reverse()
>>> numbers
[7, 6, 1, 5, 3]
>>> 

(9) sort
对列表进行排序,改变原列表,并不返回一个已排序的列表副本,默认是按升序排列:

>>> numbers
[7, 6, 1, 5, 3]
>>> numbers.sort()
>>> numbers
[1, 3, 5, 6, 7]
>>> 

既需要一个排好序的列表副本,同时又保留原有列表不变:

>>> numbers=[4,3,5,1,6]
>>> y=numbers[:]
>>> y.sort()
>>> numbers
[4, 3, 5, 1, 6]
>>> y
[1, 3, 4, 5, 6]
>>> 

或者使用函数sorted也能达到此效果:

>>> y=sorted(numbers)
>>> numbers
[4, 3, 5, 1, 6]
>>> y
[1, 3, 4, 5, 6]
>>> 

sort有两个可选的参数:key和reverse:

reverse表示降序排列:

>>> numbers=[4,3,5,1,6]
>>> numbers.sort(reverse=True)
>>> numbers
[6, 5, 4, 3, 1]
>>> 

key表示按某一键值排列:

>>> names=['ddd','aa','bbbb','c']
>>> names.sort(key=len)
>>> names
['c', 'aa', 'ddd', 'bbbb']
>>> names.sort(key=len,reverse=True)
>>> names
['bbbb', 'ddd', 'aa', 'c']
>>> 

4 元组
元组是不可变序列,不能修改,用逗号分隔一些值即可创建元组:

>>> 2,3,4
(2, 3, 4)
>>> ()
()
>>> 42,
(42,)
>>> 3*(42)
126
>>> 3*(42,)
(42, 42, 42)
>>> 

4.1 将序列转换成元组
tuple函数将一个序列作为参数转换为元组:

>>> tuple([42])
(42,)
>>> tuple('hellp')
('h', 'e', 'l', 'l', 'p')
>>> 

4.2 元组的操作
元组可作索引取值和分片操作。

>>> y
('h', 'e', 'l', 'l', 'p')
>>> y[0]
'h'
>>> y[2:4]
('l', 'l')
>>> 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值