码迷,mamicode.com
首页 > 编程语言 > 详细

python入门:列表和元组

时间:2018-04-08 15:55:09      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:序列

列表与元组的主要不同在于,列表是可以修改的,元组不可以。列表适用于需要中途添加元素的情形,元组适用于出于某种考虑禁止修改序列的情形。在需要处理一系列值时,序列很有用,在数据库中,你可能使用序列来表示人,其中第一个表示姓名,第二个表示年龄。用列表表示如下:

user=['Andy',20]

序列还可包含其他序列

user=['Andy',20]
use=['john',21]
database=[user,usr]
database
[['Andy', 20], ['john', 21]]
data=['Aurora',user]
data
['Aurora', ['Andy', 20]]

有几种操作使用于所有序列,包括索引、切片、相加、相乘和成员检查。另外还有一些内置函数,可用于确定序列的长度以及找出序列中最大和最小的元素。

索引:

序列中所有的元素都有编号-从0开始递增

set='Hello'
set[0]
'H'
字符串就是由字符组成的序列,索引0指向第一个元素,这里为字母H,不同于其他一些语言,python没有表示字符的类型。因此一个字符就是只包含一个元素的字符串。

这称为索引,还可使用负索引来获取元素

set[-1]
'o'

对于字符串字面量(以及其他序列字面量)可直接对其执行索引操作,无需先将其赋给变量,这与先赋给变量在对变量执行索引操作的效果一样。

'Hello'[1]
'e'

如果函数调用返回一个序列,可直接对其执行索引操作。例如,你只想获取用户输入的姓名第二位:

name=input('name: ')[2]
name: john
name
'h'

切片:

使用索引来访问单个元素外,还可使用切片来访问特定范围内的元素,使用两个索引用冒号分隔:

tag='<a href="How long have you been studying python">python web site</a>'
tag[9:30]
'How long have you bee'
tag[49:-4]
'python web site'

切片适用于提取序列一部分,其中的编号非常重要,第一个索引是包含第一个元素的编号,第二个索引是切片后前一位的元素编号(下标从0开始)

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

两个索引来指定切片的边界,其中一个索引指定的元素包含在切片内,第二个索引指定的元素不包含在切片内。

简写:

# 如果切片结束与序列末尾,可省略第二个索引:
number[-3:]
[8,9,10]
# 如果切片始于序列开头,可省略第一个索引:
number[:3]
[1,2,3]
# 复制序列
number[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

步长:

执行切片操作时,显示或隐示地制定起点和终点,但通常省略另一个参数,即步长。在普通切片中,步长为1(从一个元素移动到下一个元素),切片包含起点和终点之间的所有元素。

number[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
number[0:10:2]
[1, 3, 5, 7, 9]

也可以简写:

number[::4]
[1, 5, 9]

步长不能为0,但是可以是负数,这样获取元素的位置是从右向左。

number[::-2]
[10, 8, 6, 4, 2]

步长为正数时,它从起点移到终点,步长为负数时,它从终点移到起点。

序列相加:

[1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
[1,2,3]+'world'
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    [1,2,3]+'world'
TypeError: can only concatenate list (not "str") to list

不能拼接序列与字符串,虽然他们都是序列,一般不能拼接不同类型的序列。

乘法:

'hello' * 2
'hellohello'
[2] * 3
[2, 2, 2]

如先定义序列但并不为其赋值可用

name=[None] *  5
name
[None, None, None, None, None]

成员资格:

检查特定的值是否包含在序列中,使用in.满足条件返回true,否则返回false.

name='Andy'
'A' in name
True
# 对于字符串来说只有它包含的字符才是其成员或元素。
'p' in 'python'
True

长度、最小值、最大值

number=[100,20,80]
len(number)
3
max(number)
100
min(number)
20
max(2,3,7)
7

列表常用方法

#赋值
x = [1,2,1]
x[1]= 3
x
[1, 3, 1]
# 删除元素
x = [1,3,1]
del x[1]
x
[1, 1]
# 给切片赋值
name=list('Perl')
name
['P', 'e', 'r', 'l']
name[3:]=list('ar')
name
['P', 'e', 'r', 'a', 'r']
# 还可以在不删除原有元素的情况下插入新元素
name[1:1]=list('el')
name
['P', 'r', 'l', 'e', 'r', 'a', 'r']
del name[1::2]
name
['P', 'l', 'r', 'r']

方法是与对象(列表、数、字符串等)联系紧密的函数。

# 在末尾追加元素:append
number.append(4)
number
[1, 2, 3, 4]
# 清空列表:clear
number.clear()
number
[]
# 复制:copy
a  = [1,2,3] 
b = a
b[1]=4
b
[1, 4, 3]
a
[1, 4, 3]

a = [1,4,3]
b=a.copy()
b[1]=5
a
[1, 4, 3]
# 计数:count
['to','be','or','not','to','be'].count('to')
2
x=[[1,2],1,2,[1,2,[2,1]]]
x.count(1)
1
# 扩展追加exend
a =[1,2,3]
b= [4,5,6]
a.extend(b)
a
[1, 2, 3, 4, 5, 6]
b
[4,5,6]

a+b
[1, 2, 3, 4, 5, 6, 4, 5, 6]
a
[1, 2, 3, 4, 5, 6]
b
[4, 5, 6]

# 查找第一次在序列中出现的索引
a =['to','be','or','not','to','be']
a.index('be')
1
a[1]
'be'
# inster:插入
number = [1,2,3,4,5]
number.insert(2,8)
number
[1, 2, 8, 3, 4, 5]
# pop删除末尾最后一个元素并返回删除元素,pop是唯一既修改列表又返回一个非none值的列表方法。
number.pop()
5
number
[1, 2, 8, 3, 4]

number.insert(0,number.pop(0))

# 删除第一个指定值的元素
a =['to','be','or','not','to','be']
a.remove('to')
a
['be', 'or', 'not', 'to', 'be']
# 倒序排列:reverse
number = [2,8,3,4]
number.reverse()
number
[4, 3, 8, 2]
# 对列表就地排序指对原表进行修改:sort
number = [4,3,8,2]
number.sort()
number
[2, 3, 4, 8]


元组:不可修改的序列

元组的几种写法。

(1,2,3)
 1,2,3
 (2,)
 2,
3 * (20+2)
66
3* (20+2,)
(22, 22, 22)
(22)与22完全等效,加上逗号,就能完全改变表达式的值

函数tuple的工作原理与list很像,它将一个序列作为参数,并将其转换为元组。如果参数是元组,就原封不动的返回。

tuple([1,2,3])
(1,2,3)
tuple('abc')
('a','b','c')
tuple((1,2,3))
(1,2,3)
x = 1,2,3
x[1]
2
x[0:2]
(1,2)































python入门:列表和元组

标签:序列

原文地址:http://blog.51cto.com/12760193/2095658

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!