1. 列表和元组的区别就在于,列表可以修改,元组不可以,一般来说,自己写的函数中,几乎所有的情况下都可以用列表代替元组,但是有一种情况需要注意,就是因为元组具有不可修改的特性,所以比较适合用来作为字典的键。
2. 序列之间的组合有点多维数组的意思。
3. 对于序列来说,索引功能是很重要的
例:
>>> greeting = 'Hello'
>>> greeting[0]
'H'
类似于数组下标,但是有一点不一样的是,Python的序列下标可以为负值,如果是负值的话就表示从右边往左边数第多少位
例:
>>> greeting = 'Hello'
>>> greeting[-1]
'o'
当然,序列下标必须要满足条件,也就是不能过界,序列下标不能大于序列的元素个数减一(因为数组是从0开始计数的)且不能小于数组的下标的负数(因为下标为-1表示序列最后一个数据,而不是0)
例:
>>> greeting = 'Hello'
>>> greeting[20]
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
greeting[20]
IndexError: string index out of range
3. 字符串的字面值可以直接使用索引
例:
>>> greeting[0]
'H'
4. 如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作
例:
>>> fourth = input('year: ')[3]
year: 2005
>>> fourth
'5'
5. 索引的示例:
# 根据给定的年月日以数字形式打印出日期
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
]
# 以1~31的数字作为结尾的列表
endings = ['st','nd','rd'] + 17 * ['th'] \
+ ['st','nd','rd'] + 7 * ['th'] \
+ ['st']
year = input('Year: ')
month = input('Month(1-12): ')
day = input('Day(1-31): ')
month_number = int(month)
day_number = int(day)
# 记得要将月份和天数减1,以获得正确的索引
month_name = months[month_number - 1]
ordinal = day + endings[day_number - 1]
print (month_name + ' ' + ordinal + ' ' + year)
input("Enter")
Year: 1974
Month(1-12): 8
Day(1-31): 16
August 16th 1974
Enter
6. 序列的分片就像是Java中字符串的substring方法,指定头下标和尾下标获取子串,头算尾不算
例:
>>> tag = '<a href="http://www.python.org">Python web site</a>'
>>> tag
'<a href="http://www.python.org">Python web site</a>'
>>> tag[9:30]
'http://www.python.org'
>>> tag[32:-4]
'Python web site'
7. 这种分片的方式来获取子串有一点和Java不一样,它的尾部字符下标可以超过字符串总长度,所以可以存在如下这种形式来获取,如果我们想获取某一个字符后的所有字符,又不想去算到尾部的下标的话,这种形式就比较适用了。
例:
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers[7:100]
[8, 9, 10]
8. 这种方式还有一个特点是,如果第一个下标比第二个下标代表的字符顺序靠后或相等的话就会得到一个空的序列
9. 如果想要分片所获得的子串是从尾部开始算起的前N个字符,又无法控制字符串的总下标数,这样就不适合在程序中硬编码尾部下标了,可以使用这种方式
例:
>>> numbers[-3:]
[8, 9, 10]
10. 上述的方法同样可以运用在想获取从头开始指定位数的子串,或者再深入的想一下,如果将两个下标都置为空,这样就会实现字符串的复制
例:
>>> numbers[:3]
[1, 2, 3]
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
11. 分片时还可以指定步长,默认的步长是1,如果步长指定为N,则会隔N-1取数
例:
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
12. 步长可以为负数,如果需要设置步长为负数的话,需要使的首下标在尾下标之后,否则还是会得到空串,步长为负数代表从后往前取
例:
>>> numbers[10:0:-2]
[10, 8, 6, 4, 2]
>>> numbers[10:0:-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2]
如果想实现倒序
>>> numbers[10::-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
13. 列表和字符串不可以相加,列表和列表可以,字符串和字符串也可以
例:
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> '111' + '222'
'111222'
>>> '111' + [1,2,3]
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
'111' + [1,2,3]
TypeError: Can't convert 'list' object to str implicitly
14. 用数字乘以一个序列会产生一个新的序列,这个序列中原来的序列会被重复这个数字的次数
例:
>>> 'beautiful' * 5
'beautifulbeautifulbeautifulbeautifulbeautiful'
15. None是Python的内建值,理解上应该是和Java的关键字一样,表示什么都没有,只是用来占位的
16. 为了检查一个值是否在序列中,可以使用in运算符
例:
>>> permission = 'rw'
>>> 'w' in permission
True
>>> 'q' in permission
False
>>> users = ['mlh','foo','bar']
>>> input('Enter your name: ') in users
Enter your name: foo
True
例:
database = [
['albert', '1234'],
['dilbert', '4242'],
['smith', '7524'],
['jones', '9843']
]
username = input('username: ')
pin = input('PIN code: ')
if [username, pin] in database: print('Access granted')
username: albert
PIN code: 1234
Access granted