初心大陆-----python宝典 第四章
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初心大陆-----python宝典 第四章相关的知识,希望对你有一定的参考价值。
新的故事又要开始了。
继续学习中。
列表和元组,吃掉吃掉,统统吃掉。
在初心大陆中最基本的数据结构就是序列,序列中的每个元素都被分配一个序号,即元素的位置,也被称之为元素的位置。第一个索引是0,第二个则是1,以此类推。
序列中的最后一个元素标记为-1,倒数第二个元素为-2
以此类推。
一般正常思维好像都是以1开始,这个貌似是0开始,单初心大陆有她的规则,就按他的来好了。
至于为什么最后是-1在以此类推,我猜想是因为可以从后往前进行标识时,更加方便吧。
初心大陆一共有6个内建的序列,因为刚入门,只需了解元组和列表即可。
重点关注:列表和元组区别:列表可以修改,元组不能修改。一般来说几乎所有的情况下列表都可以代替元组,(倒是有一个例外,暂时还不清晰,需要后续学习后才知道)。
在需要操作数值时,序列很好用,可以用序列表示数据库中一个人的信息,第一个元素是姓名,
第二个元素是年龄。根据这个需求来编写代码
>>> edward = [‘Edward Gumby‘,4]
>>> john = [‘John Smith‘,5]
>>> databse = [edward,john]
>>> databse
[[‘Edward Gumby‘, 4], [‘John Smith‘, 5]]
>>>
跟着写来一遍再说,貌似和数据库的存储关系有点像,也可以存储相关用户等信息。
挺相似的,继续学习下看看有没有更加好玩的东西
貌似挺好理解的。
通用序列操作。
所有的 序列类型都可以进行某些特定的操作,这些操作包含:索引(indexing)、分片(sliceing)、
加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员,除此,我的天哪,好多知识呢。初心大陆还可以计算序列长度,找出最大值,最小值的内建函数。
还有一个重要内容就是迭代:依次对序列中的每个元素重复执行某些操作。
索引。:
例如最简单的:
>>> greeting = ‘Helloworld‘
>>> greeting[0]
‘H‘ 索引0指向的第一个元素就是字母H,因为序列是从0开始的。
>>>
>>> greeting[-1]
‘d‘ 最后一个位置用-1表示而不是-0
>>>
下面的内容就让小P老师给演示一下吧
months = [
‘January‘,
‘February‘,
‘March‘,
‘April‘,
‘May‘,
‘June‘,
‘July‘,
‘August‘,
‘September‘,
‘October‘,
‘November‘,
‘December‘,
]
###st + nd + rd + 17个th+ st + nd + rd + 7个th+st
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) 将赋值的month转换为整型
day_number = int(day) 将赋值的day转换为整型
month_name = months[month_number-1] 将月份和天数减1以获取正确的索引,这为什么减1,不清楚。谁知道可以回复告知下。
ordinal = day + endings[day_number-1]
print month_name + ‘ ‘ + ordinal + ‘, ‘ + year
输出的结果是:
Year: 2015
Month (1-12): 12
DAY(1-31): 31
December 31st, 2015
>>>
接着向下看了,分片。
什么是分片:可以理解为使用分片操作来访问一定范围内的元素,分片可以通过冒号相隔的两个索引来实现。
>>> tag
‘123456789http://www.baidu.com1234556789‘
>>> tag[9:-10]
是不是好有意思。
我刚刚又做了下实验,发现赋值的时候没有在外面加上单引号在分片时,没有任何作用。这块要注意下。
>>> tag = [‘123456789http://www.baidu.com1234556789‘]
[‘123456789http://www.baidu.com1234556789‘]
>>> tag[9:-9]
分片还有个最需要注意的地方一定要记住:分片操作的实现需要提供两个索引做为边界,第一个索引的元素是包含在分片内的,而第二个则不包含在分片内。
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> numbers [3:6]
[4, 5, 6]
>>> numbers [7:10]
[8, 9, 10] 这里说明下,因为没有第11个元素,所以并不存在,但他却是最后一个元素,所以可以显示
>>>
>>> numbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[-3:-1]
[8, 9]
>>>
如果我把-1去掉,后面不加值,那么会怎么样?
>>> numbers[-3:]
[8, 9, 10] 他会将-3后面的所有值都打印出来。
>>>
这种方法同样适用于开始序列:
>>> numbers[:3]
[1, 2, 3]
>>>
如果要输出整列:
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
更大的步长,这是什么?
通常普通的分片步长通常默认为1,分片就是按照这个步长逐个遍历序列元素的然后返回结束点的所有元素。
大概比较清晰。
>>> numbers[0:102]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:2] 这里面的2就是步长了。
[1, 3, 5, 7, 9]
>>>
如果步长设置成0那么就不会向下执行了。但是步长可以为负数,即从右到左来提取元素了。
试试再说
步长为2是从左导游提取。步长为-2是从右到左提取元素了。
>>> numbers[-5::2]
[6, 8, 10]
>>>
>>> numbers[-5::-2]
[6, 4, 2]
>>>
序列的相加。
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> ‘hello‘ + ‘world‘
‘helloworld‘
>>> ‘hello‘ + [1,2,3]
Traceback (most recent call last):
File "<pyshell#50>", line 1, in <module>
‘hello‘ + [1,2,3]
TypeError: cannot concatenate ‘str‘ and ‘list‘ objects
>>>
列表和字符串是无法连接在一起的,只能是相同类型的序列才可以进行连接。
乘法:又是乘法感觉不像是简单的乘法呢,莫名的不安出现了。
看看咋解释的:大体意思就是序列会被重复x次
试试操作再说:
>>> ‘python‘ * 5
‘pythonpythonpythonpythonpython‘ python别乘以了5次
>>>
如果想要清空一个列表的值,但是有想要占对应元素值可以按照如下方法:
>>> seq = [None] * 10
>>> seq
[None, None, None, None, None, None, None, None, None, None] None可以代表空值
>>>
小P老师又来个小事例:大显身手来吧:
sentence = raw_input("Sentence: ")
screen_width = 80
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width) // 2
print ‘ ‘ * left_margin + ‘+‘ + ‘-‘ * (box_width-4) + ‘+‘
print ‘ ‘ * left_margin + ‘|‘ + ‘ ‘ * text_width + ‘ |‘
print ‘ ‘ * left_margin + ‘|‘ + sentence + ‘ |‘
print ‘ ‘ * left_margin + ‘|‘ + ‘ ‘ * text_width + ‘ |‘
print ‘ ‘ * left_margin + ‘+‘ + ‘_‘ * (box_width-4) + ‘+‘
输出的结果是:
+---------------------+
| |
|hello,world,python! |
| |
+_____________________+
额,怎么到这粘贴后面多出去了。实验上还是没问题的。
成员资格,感觉像一个题目呢:搞错了吧
看看下面东西再说:
为了检查一个值是否在序列里面可以使用in运算符,和数据的操作一致呢,数据库里面操作时也会用in来查找括号内的数据是否存在。
,这里有点不同的是用来判断是否存在,存在则为真。反之假。
例子来了:
>>> abs = ‘rs‘
>>> si in bas
Traceback (most recent call last):
File "<pyshell#58>", line 1, in <module>
si in bas
NameError: name ‘si‘ is not defined
>>> abs = ‘rs‘
>>> ‘sf‘ in abs
False
>>> ‘s‘ in abs
True
>>>
>>> users = [‘mlh‘,‘foo‘,‘bar‘]
>>> raw_input(‘enter your users name: ‘) in users
enter your users name: mlh
True
>>>
是不是感觉到很神奇,in方法还能这么用。
>>> subject = ‘$$$ffasfdasf$$$‘
>>> $$$ in subject 特殊符号需要用单引号来扩起来
SyntaxError: invalid syntax
>>> ‘$$$‘ in subject 原来特殊符号也可以用来in来查找
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
>>>
好累呀,学了好多东西,需要吸收下了,不一定学的快就是好的,只有把基础掌握了,才能更好的发展下去。
可是学习激情还在,在看最后一点东西吧:
长度,最小值,最大值:
都是内建函数:len,min,max
具体该怎么操作呢:?
>>> numbers = [100,54,421]
>>> len(numbers)
3
>>> max(numbers)
421
>>> min(numbers)
54
>>> max(2,3,1)
3
>>> min(1,2,4)
1
>>>
都挺好理解的,最后2个函数的参数不是一个序列,而是以多个数字直接作为参数了。
在看看自己写的东西,哪里需要补充学习的。明天继续学习,学习前复习下之前学过的知识
以上是关于初心大陆-----python宝典 第四章的主要内容,如果未能解决你的问题,请参考以下文章