列表和元组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表和元组相关的知识,希望对你有一定的参考价值。

# coding:utf-8

#--------------------------------------   通用序列操作  -----------------------------------------------

#索引

greeting = ‘Hello‘

print greeting[0]          #第一位是0

#H

print greeting[-1]          #最后一位是-1,不是-0

#o

print ‘Hello‘[1]            #字符串字面值直接使用索引,和上面方法效果一样

#e

#fourth = raw_input(‘Year: ‘)[3]     #函数返回序列使用索引,只拿取第四位字符

#Year: 2005

#print fourth

#5

#实例脚本详见date.py

#分片

#分片通过冒号隔开的两个索引来实现:

tag = ‘<a href="http://www.python.org">Python web site<\a>‘

print tag[9:30]

#http://www.python.org

print tag[32:-4]

#Python web sit

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

print numbers[3:6]

#[4, 5, 6]

print numbers[0:1]

#[1]

print numbers[7:10]     #索引10指向第11个元素,这个元素不存在,却是在最后一个元素之后

#[8, 9, 10]

print numbers[-3:-1]   #倒数方式,无法取得最后一位

#[8, 9]

print numbers[-3:]     #取得最后一位方式

#[8, 9, 10]

print numbers[:3]      #从第一位开始

#[1, 2, 3]

print numbers[:]

#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#脚本例子

#对http://www.abc.com 形式的URL进行分割

#url = raw_input(‘Please enter the URL: ‘)        #需要输入URL,比如http://www.abc.com

#domain = url[11:-4]

#print "Domain name: " + domain

#Please enter the URL: http://www.abc.com

#Domain name: abc

#更大的步长

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

print numbers[0:10:1]       #步长为1

#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print numbers[0:10:2]      #步长为2

#[1, 3, 5, 7, 9]

print numbers[3:6:3]

#[4]

print numbers[::4]          #每4个元素第一个提取出来

#[1, 5, 9]

print numbers[8:3:-1]       #步长负数就是倒着来

#[9, 8, 7, 6, 5]

print numbers[10:0:-2]

#[10, 8, 6, 4, 2]

print numbers[0:10:-2]      #步长负数正着来无法显示

#[]

print numbers[::-2]

#[10, 8, 6, 4, 2]

print numbers[5::-2]

#[6, 4, 2]

print numbers[:5:-2]

#[10, 8]

#序列相加

numbers = [1,2,3] + [4,5,6]

print numbers

#[1, 2, 3, 4, 5, 6]

numbers = ‘Hello, ‘ + ‘world!‘

print numbers

#Hello, world!

#numbers = [1,2,3] + ‘word!‘     #列表和字符串无法连接一起,会报错

#print numbers

#乘法

print ‘python‘ * 5      #重复5次

#pythonpythonpythonpythonpython

print [42] * 10

#[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

sequence = [None] * 10      #None代表空列表

print sequence

#[None, None, None, None, None, None, None, None, None, None]

#判断成员资格

#为了检查一个值是否在序列中,可以使用in运算符。

permissions = ‘rw‘

if ‘w‘ in permissions: print True

#True

if ‘x‘ not in permissions: print False

#False

#users = [‘mlh‘, ‘foo‘, ‘bar‘]

#if raw_input(‘Enter your user name: ‘) in users: print True

#Enter your user name: mlh

#True

subject = ‘$$$ Get rich now!!! $$$‘

if ‘$$$‘ in subject: print True

#True

database = [

   [‘albert‘, ‘1234‘],

   [‘dilbert‘, ‘4242‘],

   [‘smith‘, ‘7524‘],

   [‘jones‘, ‘9843‘]

]

#username = raw_input(‘User name: ‘)

#pin = raw_input(‘PIN code: ‘)

#if [username, pin] in database: print ‘Access granted‘

#User name: albert

#PIN code: 1234

#Access granted

#长度最小值最大值

numbers = [100, 34, 678]

print len(numbers)      #元素的数量

#3

print max(numbers)      #最大的元素

#678

print min(numbers)      #最小的元素

#34

print max(2, 3)         #显示最大元素

#3

print min(9, 3, 2, 5)   #显示最小元素

#2

#--------------------------------------------------   列表  -------------------------------------------------------

#列表是可变的,可修改。

#list函数

print list(‘Hello‘)                         #字符串转换列表

#[‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]

print ‘‘.join([‘H‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘])   #列表转换字符串

#Hello

#基本列表操作

#改变列表:元素赋值

x = [1, 1, 1]           #不能为一个位置不存在的元素进行赋值。如果列表长度为2,那么不能为索引为100的元素赋值。如果要那样做,就必须创建一个长度为101或者更长的列表。

x[1] = 2

print x

#[1, 2, 1]

#删除元素

names = [‘Alice‘, ‘Beth‘, ‘Cecil‘, ‘Dee-Dee‘, ‘Earl‘]

del names[2]        #除了删除列表中的元素,del还可以删除其他元素,比如字典元素或是其他变量元素。

print names

#[‘Alice‘, ‘Beth‘, ‘Dee-Dee‘, ‘Earl‘]

#分片赋值

name = list(‘Perl‘)

print name

#[‘P‘, ‘e‘, ‘r‘, ‘l‘]

name[2:] = list(‘ar‘)

print name

#[‘P‘, ‘e‘, ‘a‘, ‘r‘]

name = list(‘Perl‘)

name[1:] = list(‘ython‘)

print name

#[‘P‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]

numbers = [1, 5]

print numbers

#[1, 5]

numbers[1:1] = [2, 3, 4]        #可以在不需要替换任何原有元素的情况插入新的元素

print numbers                   #这个程序只是“替换”了一个空的分片,因此实际的操作是插入了一个序列。

#[1, 2, 3, 4, 5]

numbers[1:4] = []           #通过分片赋值来删除元素

print numbers

#[1, 5]

numbers[1:-1] = [2, 3, 4]

print numbers

#[1, 2, 3, 4, 5]

del numbers[1:-2]

print numbers

#[1, 4, 5]

numbers[1:-2] = [2, 3]

print numbers

#[1, 2, 3, 4, 5]

#列表方法

#方法调用:对象.方法(参数)

#append追加

lst = [1, 2, 3]         #不可以用内建函数list作为变量

lst.append(4)           #在列表末尾追加新的对象

print lst

#[1, 2, 3, 4]

#count统计

#count方法统计某个元素在列表中出现的次数

print [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘].count(‘to‘)

#2

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

print x.count(1)

#2

print x.count([1,2])

#1

#extend追加列表

#extend方法可以在列表的末尾一次性追加另一个序列中的多个值。换句话说,可以用新列表扩展原有的列表:

a = [1, 2, 3]

b = [4, 5, 6]

a.extend(b)

print a

#[1, 2, 3, 4, 5, 6]

#这个操作看起来很像连接操作,两者最主要区别在于:extend方法修改了被扩展的序列(在这个例子中,就是a)。而原始的连接操作则不然,它会返回一个全新的列表。

a = [1, 2, 3]

b = [4, 5, 6]

c =  a + b

print a

#[1, 2, 3]

print c

#[1, 2, 3, 4, 5, 6]

a = a + b           #这样的并没有被修改,而是创建了一个a和b副本的新列表,这样的方式效率比较低。

print a

#[1, 2, 3, 4, 5, 6]

a = [1, 2, 3]

b = [4, 5, 6]

a[len(a):] = b      #我们可以使用分片赋值来实现相同结果,但代码可读性就不如使用extend方法

print a

#[1, 2, 3, 4, 5, 6]

#index 查找索引

#index方法用于从列表中找出某个值第一个匹配项的索引位置:

knights = [‘We‘, ‘are‘, ‘the‘, ‘knights‘, ‘who‘, ‘say‘, ‘ni‘]

print  knights.index(‘who‘)

#4

print knights[knights.index(‘who‘)]         #同等于print knights[4]

#who

#insert 插入对象

#insert方法用于将对象插入到列表中:

numbers = [1, 2, 3, 5, 6, 7]

numbers.insert(3, ‘four‘)

print numbers

#[1, 2, 3, ‘four‘, 5, 6, 7]

#与extend方法一样,insert方法的操作也可以用分片赋值来实现。

numbers = [1, 2, 3, 5, 6, 7]

numbers[3:3] = [‘Four‘]         #可读性不如insert

print numbers

#[1, 2, 3, ‘four‘, 5, 6, 7]

#pop 移除元素

#pop方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:

x = [1, 2, 3]

print x.pop()         #默认删除最后一个

#3

print x

#[1, 2]

print x.pop(0)

#1

print x

#[2]

#栈,先进后出FIFO队列。就是顶部放入,底部移出。入栈(push)和出栈(pop),python没有入栈方法,可以用append也可以用insert(0,...)替代。出栈可以用pop

#remove 移除第一个匹配的元素

x = [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘]

x.remove(‘be‘)      #可以看到remove是一个没有返回值的原位置改变方法,它修改了列表却没有返回值,这与pop方法相反。

print x

#[‘to‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘]

#reverse 反向存放

x = [1, 2, 3]

x.reverse()         #reverse不返回值,就像remove和sort

print x

#[3, 2, 1]

#sort 排序

#sort方法用于在原位置对列表进行排序。在“原位置排序”意味着改变原来的列表,从而让其中的元素按一定的顺序排序,而不是简单地返回一个已排序的列表副本。

x = [4, 6, 2, 1, 7, 9]

x.sort()            #x变量的列表已经被修改,但不会返回值。

print x

#当用户需要一个排好序的列表副本,同时又保留原有列表不变的时候,问题就出现了:

x = [4, 6, 2, 1, 7, 9]

y = x.sort()         #Don‘t do this!

print y

#None

#因为sort方法修改了x却返回了空值,那么最后得到的是已排序的x以及值为None的y。实现这个功能正确方法是,首先把x的副本赋值给y,然后对y进行排序:

x = [4, 6, 2, 1, 7, 9]

y = x[:]

y.sort()

print x                #保留x变量

#[4, 6, 2, 1, 7, 9]

print y                #显示y变量的排序

#[1, 2, 4, 6, 7, 9]

#再次调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法。只是简单的把x赋值给y是没用的,因为这样做让x和y都指向同一个列表了。

y = x           #指向了同一个列表

y.sort()        #x和y是同一个列表,所以列表排序后,x和y都会被排序。

print x

#[1, 2, 4, 6, 7, 9]

print y

#[1, 2, 4, 6, 7, 9]

#另一种获取已排序的列表副本方法是sorted函数:

x = [4, 6, 2, 1, 7, 9]

y = sorted(x)

print x         #x的列表保留不变

#[4, 6, 2, 1, 7, 9]

print y

#[1, 2, 4, 6, 7, 9]

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

#注意需要分两次调用,如果打算通过x.sort().reverse()来实现,会发现行不通,因为x.sort()返回的是None空值。正确方法:

x = [4, 6, 2, 1, 7, 9]

x = sorted(x)

x.reverse()

print x

#高级排序

print cmp(42, 32)    #42比32大,返回正数

#1

print cmp(99, 100)   #99比100小,返回负数

#-1

print cmp(10, 10)    #相等返回0

#0

numbers = [5, 2, 9, 7]

numbers.sort(cmp)      #根据cmp函数方式排序

print numbers

#[2, 5, 7, 9]

x = [‘aardvark‘, ‘abalone‘, ‘acme‘, ‘add‘, ‘aerate‘]

x.sort(key=len)         #根据key进行排序,key需要创建一个键函数,根据len键字符长度排序

print x

#[‘add‘, ‘acme‘, ‘aerate‘, ‘abalone‘, ‘aardvark‘]

x = [4, 6, 2, 1, 7, 9]

x.sort(reverse=True)    #reverse反向排序,指明True反向排序,指明False正向排序

print x

#[9, 7, 6, 4, 2, 1]

#--------------------------------   元组   ---------------------------------------------------

#元素不可变,无法修改

#创建元组

x = 1, 2, 3

print x

#(1, 2, 3)

x = (1, 2, 3)

print x

#(1, 2, 3)

x = ()          #空元组

print x

#()

x = 42,         #一个值的元组,也需要逗号

print x

#(42,)

x = (42, )

print x

#(42,)

x = 42          #没有逗号不是元组

print x

#42

x = 3*(40+2)      #不是元组

print x

#126

x = 3*(40+2, )    #是元组。逗号很重要,加个逗号能彻底改变表达式的值。

print x

#(42, 42, 42)

#tuple 转换为元组

print tuple([1, 2, 3])      #列表转换元组

#(1, 2, 3)

print tuple(‘abc‘)          #字符串转换元组

#(‘a‘, ‘b‘, ‘c‘)

print tuple((1, 2, 3))      #本身是元组,返回同样元组

#(1, 2, 3)

#元组基本操作

#元组其实并不复杂--除了创建元组的访问元组元素之外,没有太多其他操作。

x = 1, 2, 3

print x[1]

#2

print x[0:2]                #元组的分片还是元组,就像列表的分片还是列表一样

#(1, 2)


#涉及的函数

#cmp(x,y)           #比较两个值

#len(seq)           #返回序列的长度

#list(seq)          #把序列转换成列表

#max(args)          #返回序列或者参数集合中的最大值

#min(args)          #返回序列或者参数集合中的最小值

#reversed(seq)      #对序列进行反向迭代

#sorted(seq)        #返回已排序的包含seq所有元素的列表

#tuple(seq)         #把序列转换成元组


本文出自 “桃子技术” 博客,请务必保留此出处http://taozijishu.blog.51cto.com/11320335/1976373

以上是关于列表和元组的主要内容,如果未能解决你的问题,请参考以下文章

Python成长之路第一篇-初识列表和元组

Python成长之路第一篇-初识列表和元组

序列——列表和元组

Python 列表和元组

Python核心列表和元组

#9 Python列表和元组