小白之Python-基础中的基础03
序列,目前看来很基础,东西比较多,难度开始加大。。。加油吧,骚年
Python之序列
1.数据结构:序列、容器(序列:索引、映射:键)、集合
2.列表、元组、字符串、Unicode字符串、buffer对象、xrange对象
3.列表可以修改、元组不可修改(一般情况下列表都可以替代元组),并且列表有许多专门方法(下面会说明)
序列
#定义一个【名字、年龄】的库?datebase
maomao=['maomao',21]
chouchou=['chouchou',22]
xiangxiang=['xiangxiang',23]
benben=['benben',24]
database=[maomao,chouchou,xiangxiang,benben]
print database
------下面是结果
[['maomao', 21], ['chouchou', 22], ['xiangxiang', 23], ['benben', 24]]
通用序列的操作:
索引、分片、加、乘、检查都元素是否属于序列成员、
计算序列长度、最大最小值、迭代(依次对序列中的每个元素重复执行X动作)
索引:
序列中的所有元素都是有编号的-----从0 开始递增。>>> greeting = 'maomao'
>>> greeting[0]
'c'
>>> greeting[2]
'o'
使用负数索引时,python 会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是-1
>>> greeting = 'maomao'
>>> greeting[-1]
'o'
>>> greeting[-2]
'a'
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作
例如,假设只对用户输入年份的第4个数字感兴趣,那么,可以进行如下操作:
fourth = raw_input('year:')[3]
print fourth #以1-31的数字作为结尾的列表
endings = ['st','nd','rd']+ 17*['th']\
+['st','nd','rd']+ 7*['th']\
+['st']
#嗯,总的来说,目前对这一段代码,对目前的小白我内心还是崩溃的。。 #根据给定的年月日以数字形式打印出日期
#定义months,是一个序列
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
] #以1-31的数字作为结尾的列表
#['st','nd','rd']表示1/2/3日分别以'st','nd','rd'结束
#17*['th']表示每月的第四日开始-第20日,均以'th'结束,为17个
#['st','nd','rd']+ 7*['th']+['st'],就好理解了。。
#每一行最后的\ 是用来换行的
endings = ['st','nd','rd']+ 17*['th']\
+['st','nd','rd']+ 7*['th']\
+['st'] #python2中,要用raw_input语法来获取用户输入值,这玩意获取完大约是‘xx’--字符串类型?i am not sure??
year =raw_input('year:')
month =raw_input('month(1-12):')
day =raw_input('day(1-31)') #然后把获取到的用户输入的数值转换成int类型
month_number = int(month)
day_number = int(day) #将月份和天数减1,以获得正确的索引,索引值是从0开始的
month_name = months[month_number-1]
ordinal = day + endings[day_number - 1] print month_name + ' ,' + ordinal + ' ,' + year
-----------------------------------------------
输入:
>>>
year:2017
month(1-12):8
day(1-31)3
输出:
August ,3rd ,2017
------------------------------------
(╥╯^╰╥)无奈呀~~加油吧,很快就能看懂了
-----------------华丽的分界线-------------
分片:类似java中的截取子串
(1)基础分片
格式:变量[x:y]---第x个索引开始,第y-1个索引结束,分片通过冒号相隔的两个索引来实现
>>> tag = '<a href="http://www.python.org">Python web site</a>'
>>> tag[9:30] # 取第9个到第30个之间的字符
'http://www.python.org'
>>> tag[32:-4] #取第32到第-4(倒着数第4个字符)
'Python web site'
>>>
>>> numbers = [0,1,2,3,4,5,6,7,8,9]
>>> numbers[7:-1] # 从第7个数到 倒数第一个数
[7, 8] #显然这样不可行
>>> numbers[7:10] #从第7个数到第10个数
[7, 8, 9] #这样可行,索引10指向的是第11个元素。
>>> numbers[7:] # 可以置空最后一个索引解决
[7, 8, 9]
>>> numbers[:3]
[0, 1, 2]
>>> numbers[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
url = raw_input('Please enter the URL:')
domain = url[11:-4] print "Domain name:" + domain
------------------------------------------
输入:
>>>
Please enter the URL:http://fnng.cngblogs.com
输出:
Domain name:.cngblogs
(2)进阶分片
分片可以正分片,也可以负分片
正分片:头到尾
格式:变量[x:y:z] 要求x<y,且z>0
表示第x个索引开始,第y-1个索引结束,并以z-1为分片步数---第x个索引开始,第y-1个索引结束,并以z-1为分片步数(即:每z个字符取一个)
负分片:尾到头
格式:变量[x:y:z] 要求x>y,且z<0
表示第x个索引开始,第y-1个索引结束,并以z-1为分片步数---第x个索引开始,第y-1个索引结束,并以z-1为分片步数(即:每z个字符取一个)
该方法实现序列的倒输出
当x/y没有指定固定值时,如步数为正,则自左向右按步数取值
如步数为负,则自右向左按步数取值
正分片:
numbers = [0,1,2,3,4,5,6,7,8,9]
print numbers[0:1] #[0]
print numbers[:] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print numbers[0:] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print numbers[:10] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print numbers[3:7] #[3, 4, 5, 6]
print numbers[0:10:2] #[0, 2, 4, 6, 8]
print numbers[3:6:3] #[3]
负分片
print numbers[::4] #[0, 4, 8]
print numbers[8:3:-1] #[8, 7, 6, 5, 4]
print numbers[10:0:-2] #[9, 7, 5, 3, 1]
print numbers[::-2] #[9, 7, 5, 3, 1]
print numbers[5::-2] #[5, 3, 1]
print numbers[:5:-2] #[9, 7]
-----------------华丽的分界线-------------
序列相加:
通过使用加号可以进行序列的连接操作:+
列表和字符串是无法连接接在一起的,尽管它他们都是序列。简单来说,两种相同类型的序列才能进行连接操作。
>>> 'hello.'+'world!'
'hello.world!' >>> [1,2,3]+[4,5,6]
[1,2,3,4,5,6] >>> [1,2,3] + 'world!'
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
[1,2,3] + 'world!'
TypeError: can only concatenate list (not "str") to list
乘法:
序列*次数,生成新的序列,原序列执行次数次
print 'python'*5 #pythonpythonpythonpythonpython
print [42]*5 #[42, 42, 42, 42, 42]
print [42,32]*5 #[42, 32, 42, 32, 42, 32, 42, 32, 42, 32]
如果想创建一个占用十个元素空间,却不包括任何有用的内容的列表,可以用None
print []*5 #[] 为空序列
print [0]*5 #[0, 0, 0, 0, 0] 为没有任何意义的序列
print [None]*5 #[None, None, None, None, None] 为有None站位符的序列
---神一样的盒子
# 以正确的宽度在居中的“盒子”内打印一个句子
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)+ '+'
-----------------------------------
想看输入结果不。。。嗯,自己抄代码去。。。
绝对不会承认是偶copy不出效果来了。(⊙▽⊙)
-----------------华丽的分界线-------------
成员资格:
为了检查一个值是否在序列中,可以使用in 运算符。该运算符和之前已经讨论过的(例如 + , * 运算符)有一点不同。
这个运算符检查某个条件为真或假的(True or False )。
>>> permissions = 'rw' #可用于检查文件处理权限
>>> 'w' in permissions
True
>>> 'y' in permissions
False
>>> users = ['zhangsan', 'lisi','wangwu'] #可用于检查用户是否在列表中
>>> raw_input('Enter your user name: ') in users
Enter your user name: lisi
True
>>> subject ='$$$ Get rich now!!! $$$' #可用于垃圾邮件的过滤器一部分
>>> '$$$' in subject
-----------------华丽的分界线-------------
长度、最值
函数:
len() 返回序列中所包含元素的数量。
min() 返回序列中最小的元素。
max() 返回序列中最大元素。
#开始用eclipse写代码,与ubantu的交互设计不一致
-----输入
number = [100,23,233,455]
print len(number) #获取长度
print min(number) #最小值
print max(number) #最大值 print max(2,3) #最大值
print min(2,3,5,3,6,7,82,) #最小值 ------输出
4
23
455 3
2
--------------------------------分界线---------------------------
列表的函数方法们
列表是可变的,所有就有各种增删改查的方法
list() 用于将所有数据类型序列拆分成列表
join(somelist) 用于将列表转换成字符串
----元素赋值
----元素删除
----分片赋值
----列表方法
上述四方法并不都真正的改变列表
---元素赋值方法
方法一:定义列表是赋值,之前已经讲过,如
listA = [1,3,5,7,9]
方法二:利用索引,重新对列表重点元素进行赋值
listB = [1,1,1]
listB[1]=2 #注意,利用索引进行赋值时,不能超过该序列的索引长度,否则会索引越界
print listB #[1,2,1]
---元素删除方法:del():用于删除列表、字典、及其他元素。此处暂只说明列表元素的说明
#del():
name = ['maomao','chouchou','guodong','benben']
del name[0]
print name
print len(name)
---
['chouchou', 'guodong', 'benben']
3
----分片赋值方法
可以用来替换、插入、删除
name = list('maomao') #把maomao用list()转换成列表
print name
name[3:] = list('ben') #从第三个元素开始到结束,用list()转换成的ben来替代
print name
----
['m', 'a', 'o', 'm', 'a', 'o']
['m', 'a', 'o', 'b', 'e', 'n'] name = list('maomao')
name[3:] = list('xihuanben') #从第三个元素开始到结束,用list()转换成的xihuanben来替代
print name
----
['m', 'a', 'o', 'x', 'i', 'h', 'u', 'a', 'n', 'b', 'e', 'n'] name = list('maomao')
name[0:0] = list('da') #从第0个元素开始到第0-1个元素结束(即为[]字符),用list()转换成的da来插入
print name
----
['d', 'a', 'm', 'a', 'o', 'm', 'a', 'o'] number = [1,5]
number[1:1] = [2,3,4] #从第1个元素开始到第1-1个元素结束,用2,3,4来插入
print number
----
[1, 2, 3, 4, 5] number = [4,5]
number[0:0] = [1,2,3] #从第0个元素开始到第0-1个元素,用1,2,3来插入
print number
----
[1, 2, 3, 4, 5] number = [1,2,3,4,5]
number[1:4] = [] #从第1个元素开始到第4-1个元素,用[]来替换,实则为删除第2-4个数字
print number
----
[1, 5]
嗯。。。今天有个巨大的遗留问题就是:分片+step 或者 分片+负数step 的替换、删除、插入怎么玩 ???
揪心啊 ヽ(`Д´)ノ︵ ┻━┻ ┻━┻
嘛
٩(๑❛ᴗ❛๑)۶今儿先到这。。helloha~
小白之Python-基础中的基础03的更多相关文章
- [.net 面向对象编程基础] (3) 基础中的基础——数据类型
[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...
- [.net 面向对象编程基础] (4) 基础中的基础——数据类型转换
[.net面向对象编程基础] (4)基础中的基础——数据类型转换 1.为什么要进行数据转换? 首先,为什么要进行数据转换,拿值类型例子说明一下, 比如:我们要把23角零钱,换成2.30元,就需要把整形 ...
- [.net 面向对象编程基础] (5) 基础中的基础——变量和常量
[.net面向对象编程基础] (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...
- [.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式
[.net 面向对象编程基础] (6) 基础中的基础——运算符和表达式 说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如 ...
- [.net 面向对象编程基础] (7) 基础中的基础——流程控制语句
[.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些,本节参考了网上朋友所写的例子,为的是让更多小伙伴学习 ...
- [.net 面向对象编程基础] (8) 基础中的基础——修饰符
[.net 面向对象编程基础] (8) 基础中的基础——修饰符 在进入C#面向对象核心之前,我们需要先对修饰符有所了解,其实我们在前面说到变量和常量的时候,已经使用了修饰符,并且说明了变量和常量的修改 ...
- 从头开始学JavaScript 笔记(一)——基础中的基础
原文:从头开始学JavaScript 笔记(一)--基础中的基础 概要:javascript的组成. 各个组成部分的作用 . 一.javascript的组成 javascript ECMASc ...
- C++ 基础中的基础 ---- 引用
C++ 基础中的基础 ---- 引用 引用的概念:引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量.比如: int n ...
- python之基础中的基础(一)
python是一个效率极高的语言,现在市面上的机器学习大部分是由python和R语言完成,所以在不久之前小仙心中便种下了学习python的想法.下面是这一个月多月以来学习的总结,都是基础中基础了. 1 ...
- 【Python】编程小白的第一本python(基础中的基础)
一.变量 如果不知道变量是什么类型,可以通过type()函数来查看类型,在IDE中输入: print(type(word)) 另外,由于中文注释会导致报错,所以需要在文件开头加一行魔法注释 #codi ...
随机推荐
- mysql02-配置文件my.ini
https://www.cnblogs.com/isme-zjh/p/11542106.html 1.mysql安装-连接 1.1安装 略 1.2连接-退出 连接 mysql –h 主机 ...
- .NET为什么推荐它作为RabbitMQ消息队列的首选开发工具
支持.Net Core(2.0及以上)/.Net Framework(4.5及以上),可以部署在Docker, Windows, Linux, Mac. RabbitMQ作为一款主流的消息队列工具早已 ...
- 【已解决】SQL2012启动时报错:cannot find one or more cpmponents
下载Microsoft Visual Studio 2010 Shell(Isolate)-CHS安装即可 下载地址:Visual Studio 独立 Shell 下载及安装:点击同意许可,选择vs2 ...
- 滴水 1.c++类 this指针 笔记+指针
1.结构体带参数传递 将结构体的数据压入堆栈中 然后进入函数内进行处理 2.结构体指针传递 将this指针压入进去 来查找 a b数据 3.函数可以放在结构体里面,也可以放在结构体外面 放入进去后 但 ...
- 数字列表number,目标值target,找到number中两个不同数字之和等于target的数字,输出下标并顺序排列 ----笔试题记录扩展
一.思路: 输入:数字列表number,目标值target 判断条件:数字列表中两个不同数字相加等于target 输出:符合条件的两个数字的下标,下标顺序排列 方法1: def list(number ...
- 大规模 IoT 边缘容器集群管理的几种架构-4-Kubeedge
前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s 大规模 IoT 边缘容器集群管理的几种架构-2-H ...
- TNF拮抗剂的结构、功能与结核感染_Wallis2008
中信国健临床通讯 2009年第2期 TNF拮抗剂的结构.功能与结核感染 Robert S. Wallis. THE LANCET Infectious Diseases. 2008; 8:601–61 ...
- 结合ChatGPT体验新必应new bing 的惊喜:这是我第一次使用的感受
前言 最近相信大家都被 ChatGPT 刷屏了,它的爆火大家是有目共睹的,微软的新必应(New Bing) 是结合了比 ChatGPT 更强大的新一代 OpenAI 语言模式,接下来我们一起来&quo ...
- 柯尼卡美能达C226打印机安装使用说明
安装驱动,选择通过IP地址安装 输入打印机IP 点击完成即可使用
- ABAP 写入批次特征值以及更新批次特征值
需求 SAP启用了批次,需要在特征值中写入物料类型,区分该物料批次是用于研发的亦或是量产的,关于研发和量产标识我是坐在采购订单行项目增强中了,这里就不多赘述了,参考https://www.cnblog ...