4. Python脚本学习笔记四列表

4. Python脚本学习笔记四列表

本篇名言:“我们给了生活多少耕耘,生活就会赏赐我们多少果实。我们给了生活多少懒惰,生活就会回敬我们多少苦涩。”

                  序列是最基本的数据结构,这个好像哪里都有。序列中的每个元素被分配一个序号,即元素的位置,也称为索引。

                  列表的各个元素通过逗号分隔。

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

>>> john=['john',50]

>>> database=[edward,john]

>>> database

[['Edward', 42], ['john', 50]]

                  Python之中有一种名为容器containter的数据结构,容器基本上是包含其他对象的任意对象。序列(列表和元素)和映射(字典)是两类主要的容器。序列中每个元素都有自己的编号,映射中每个元素有一个名字(也叫键)。

1.  通用序列操作

1.1      索引

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

>>> greeting='hello'

>>> greeting[0]

'h'

>>> greeting[-1]

'o'

字符串就是一个由字符组成的序列。索引0指向第1个元素,-1指向最后一个元素。

索引示例,摘自书本《Python基础教程第二版》

# Print out a date, given year, month, and day as numbers

 

months = [

    'January',

    'February',

    'March',

    'April',

    'May',

    'June',

    'July',

    'August',

    'September',

    'October',

    'November',

    'December'

]

 

# A list with one ending for eachnumber from 1 to 31

endings = ['st', 'nd', 'rd'] + 17* ['th'] \

        + ['st', 'nd', 'rd'] +  7 * ['th'] \

        + ['st']

 

year    = raw_input('Year: ')

month   = raw_input('Month (1-12): ')

day     = raw_input('Day (1-31): ')

 

month_number = int(month)

day_number = int(day)

 

# Remember to subtract 1 frommonth and day to get a correct index

month_name =months[month_number-1]

ordinal = day +endings[day_number-1]

 

print month_name + ' ' + ordinal+ ', ' + year

执行结果:

Year: 2015

Month(1-12): 10

Day(1-31): 3

October 3rd,2015

 

示例说明:创建了2个数组,Months,endings

输入年,月,日

然后将月和日转换成int使用索引得到名字。

1.2      分片

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

>>> tag='<ahref="www.baidu.com</a>'

>>> tag[10:200]

'ww.baidu.com</a>'

取10到200的字符,当然数量超过字符串最大后要看实际拥有的。

 

>>> number=[1,2,3,4,5,6,7,8]

>>> number[0,1]

>>> number[0:1]

[1]

注意:0:1是不取1的。

从倒数第三个到结束

>>> number[-3:]

[6, 7, 8]

从开始到第三个元素

>>> number[:3]

[1, 2, 3]

挑选奇数位的元素

>>> number[::2]

[1, 3, 5, 7]

其中2就是步长的意思。

步长为负数表示从右到左开始。

>>> number[::-2]

[8, 6, 4, 2]

 

1.3      序列相加

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

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

当然,列表和字符串是无法连接在一起的。

 

1.4      乘法

>>> 'python'*5

'pythonpythonpythonpythonpython'

>>> [4]*10

[4, 4, 4, 4, 4, 4, 4, 4, 4, 4]

 

如果需要占用10个元素空间。可以使用none,是一个Python 的内键值。

>>> sequence=[None]*10

>>> sequence

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

 

使用如下示例看下序列乘法示例:

# Prints a sentence in a centered"box" of correct width

 

# Note that the integer division operator(//) only works in Python

# 2.2 and newer. In earlier versions,simply use plain division (/)

 

 

sentence = raw_input("Sentence:")

 

screen_width = 80

text_width  = len(sentence)

box_width   = text_width + 6

left_margin = (screen_width - box_width) // 2

 

print

print ' ' * left_margin + '+'   + '-' * (box_width-2)  +   '+'

print ' ' * left_margin + '|  ' + ' ' * text_width     + ' |'

print ' ' * left_margin + '|  ' +      sentence       + '  |'

print ' ' * left_margin + '|  ' + ' ' * text_width     + ' |'

print ' ' * left_margin + '+'   + '-' * (box_width-2)  +   '+'

print

 

输出如下图:

在print的时候将字符串进行了乘法,最后得到一个很可爱的输出。

 

1.5      检测成员

检测一个值是否在序列中,使用in运算符。

>>> permission='rwd'

>>> 'w' in permission

True

>>> 'z' in permission

False

 

示例代码:

#Check a user name and PIN code

 

database= [

    ['albert''1234'],

    ['dilbert', '4242'],

    ['smith',   '7524'],

    ['jones',   '9843']

]

 

username= raw_input('Username: ')

pin =raw_input('PIN code: ')

 

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

 

执行结果如下:

Username: smith

PINcode: 7524

Access granted

 

1.6      内建函数

常用的是len,max,min函数。

>>>numbers=[100,34,678]

>>>len(numbers)

3

>>>max(numbers)

678

>>>min(numbers)

34

 

2.  列表

列表是可变的(mutable),可以改变列表的内容。

2.1      List

字符串不能像列表一样被修改,根据字符串创建列表会很有用。

>>>list('hello')

['h', 'e', 'l','l', 'o']

 

 

2.2      基本列操作

改变元素

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

>>> x[1]=2

>>> x

[1, 2, 1]

删除元素

>>> del x[1]

>>> x

[1, 1]

 

分片赋值

>>> name=list('Hello')

>>> name

['H', 'e', 'l', 'l', 'o']

>>> name[2:]=list('ar')

>>> name

['H', 'e', 'a', 'r']

也可以用来删除其中的元素

>>> name[1:]=[]

>>> name

['H']

 

2.3      列表方法

一般来说对象方法的调用如下

对象.方法

2.3.1          Append函数

是增加一个元素

>>>lst=[1,2,3,4]

>>>lst.append(5)

>>> lst

[1, 2, 3, 4, 5]

 

2.3.2          Count函数

是计算某个值在列表中的数量

>>> lst.count(1)

1

2.3.3          Extend

是扩展列表a,和 a+b的区别是直接赋值给 a,当然我们也可以自己实现的,不过可读性没有extend好。

>>> a=[1,2,3]

>>> b=[4,5,6]

>>> a.extend(b)

>>> a

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

2.3.4          Index方法

>>>knights=['we','are','the','knights','who']

>>> knights.index('who')

4

2.3.5          Insert方法

插入

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

>>> numbers.insert(3,'four')

>>> numbers

[1, 2, 3, 'four', 5, 6, 7]

居然还能实现类似堆栈的功能,蛤蟆也是醉了

>>> numbers.pop()

7

2.3.6          Remove方法

用于移除列表中某个值的第一个匹配项

>>>x=['to','be','or','not','to','be']

>>> x.remove('be')

>>> x

['to', 'or', 'not', 'to', 'be']

Reverse方将将列表中的元素反向存放

>>> x.reverse()

>>> x

['be', 'to', 'not', 'or', 'to']

2.3.7          使用sort进行排序

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

>>> x.sort()

>>> x

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

如果不想改变原来x的排序可以使用sorted函数

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

>>> y=x

>>>y=sorted(x)

>>> x

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

>>> y

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

 

2.3.8          高级排序

可以再sort函数中提供函数来进行排序。

例如按字符串长度进行排序。

>>>x=['aardvark','abalone','acme','add','aerate','okd']

>>>x.sort(key=len)

>>> x

['add', 'okd', 'acme', 'aerate', 'abalone','aardvark']

PS: 参数除了key还有reverse。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值