python笔记02:列表与元素
本章将引入一个新的概念:数据结构。数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合。这些数据元素可以是数字或者字符,甚至可以是其他数据结构。在python中,最基本的数据结构是序列。序列中的每个元素被分配一个序号--即元素的位置,也称为索引。第一个索引为0,第二个1,以此类推。序列中的最后一个数被标志为-1,倒数第二个为-2,。。。。
2.1 序列概览:
>>> edward = ['John Smith',50]
>>> Ads = ['Edward Gumdy',42]
>>> database = [edward,Ads]
>>> database
[['John Smith', 50], ['Edward Gumdy', 42]]
python中还有一种名为容器的数据结构。容器基本上是包含其他数据对象的任意对象。序列(例如列表和元组)和映射(例如字典)是两列最主要的容器。序列中每个元素都有自己的编号,而映射中的每个元素则有一个名字(也成为键)
2.2 通用序列操作
2.2.1 索引
>>> greeting = 'hello'
>>> greeting[0]
'h'
>>> greeting[-1]
'o'
>>> test = "This is a test!"
>>> test[0]
'T'
>>> test = ['abc','','@@@','xyz']
>>> test[0]
'abc'
>>> test[-2]
'@@@'
>>> abc[-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined
>>> 'abc'[-1]
'c'
>>> 'xyz','abc'[0]
('xyz', 'a')
>>> 'xyz','abc'[-1]
('xyz', 'c')
>>> ['xyz','abc'][-1]
'abc'
以下是一个脚本示例:
# -*- coding:utf-8 -*-
#根据给定的年月日以数字形式打印出日期
months = [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
]
#以1-31的数字作为结尾的列表
ending = ['st','nd','rd'] + 17 * ['th']\
+ ['st','nd','rd'] + 7 * ['th']\
+ ['st'] year = raw_input('Year: ')
month = raw_input('Month: ')
day = raw_input('Day: ')
month_num = int(month)
day_num = int(day) #记得要将月份与天数减1,已获得正确的索引
month_name = months[month_num - 1]
ordinal = day + ending[day_num - 1] print month_name + ' ' + ordinal + '.' + year
输出如下:
Year: 1223
Month: 12
Day: 20
December 20th.1223
2.2.3 分片
>>> numbers = [1,2,3,4,5,6,7,8]
>>> numbers[3:6]
[4, 5, 6]
>>> numbers[0:2]
[1, 2]
>>> numbers[0:1]
[1]
>>> numbers[7:10]
[8]
>>> numbers[-3:0]
[]
>>> numbers[-3:-1]
[6, 7]
>>> numbers[-3]
6
>>> numbers[-3:]
[6, 7, 8]
>>> numbers[:3]
[1, 2, 3]
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8]
步长的概念:进行分片时,分片的开始和结束点需要进行指定(不管是直接还是间接),而另一个参数--步长--通常是隐式设置的。示例如下:
>>> num = [1,2,3,4,5,6,7,8,9,10]
>>> num[1:10:1]
[2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> num[1:10:2]
[2, 4, 6, 8, 10]
>>> num[3:6:2]
[4, 6]
>>> num[::4]
[1, 5, 9]
>>> num[8:3:-1]
[9, 8, 7, 6, 5]
>>> num[10:0:-3]
[10, 7, 4]
>>> num[::-2]
[10, 8, 6, 4, 2]
>>> num[5::-2]
[6, 4, 2]
>>> num[:5:-2]
[10, 8]
需要注意:
2.2.3 序列相加
>>> [1,2,3] + [abc,xyz,test]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'abc' is not defined
>>> [1,2,3] + ['abc','xyz','test']
[1, 2, 3, 'abc', 'xyz', 'test']
>>> 'hello,' + 'World'
'hello,World'
>>> [1,2,3] + 'abc' #列表与字符串是无法连接在一起的,尽管他们都是序列,但不是同一类型
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
2.2.4 乘法
>>> ['abc','xyz'] * 3
['abc', 'xyz', 'abc', 'xyz', 'abc', 'xyz']
>>> 'python ' * 3
'python python python '
空列表:空列表可以简单的通过两个中括号来表示,里面什么都没有。
>>> sequence = [None] * 10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
用代码打印一个盒子:
# -*- coding:utf-8 -*-
#以正确的宽度唉居中的“盒子”内打印一个句子
#注意:整数除法"//"只能用在python2.2以后
sentence = raw_input("Sentence: ") screen_width = 40
text_width = len(sentence)
box_width = text_width + 6
left_margin = (screen_width - box_width)//2 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) + '+'
Sentence: This is a Test!
+-------------------+
| |
|This is a Test! |
| |
+-------------------+
2.2.5 成员资格
>>> 'W' in 'world'
False
>>> 'W' in 'World'
True
>>> user = ['abc','Slar','Stant']
>>> raw_input("What's your name ?") in user
What's your name ?Slar
True
>>> subject = '$$$ Get rich now! $$$'
>>> '$$$' in subject
True
在Unix系统中,我们可以使用in来检查用户是否有某些权限,还可以用来检测用户的帐号密码是否对应的上
# -*- coding:utf-8 -*-
database = [
['albert',''],
['Andy','abc123'],
['smith',''],
['Lily','']
] username = raw_input("Please input your name: ")
pin = raw_input("Please input your pin number: ")
if [username,pin] in database:
print "Access granted."
else:
print "Something is wrong!"
输出如下:
[root@node1 2]# python ex2-4.py
Please input your name: Andy
Please input your pin number: abc123
Access granted.
[root@node1 2]# python ex2-4.py
Please input your name: Andy
Please input your pin number: 123123
Something is wrong!
2.2.6 长度,最大值,最小值
>>> num = [100,20,3088]
>>> len(num)
3
>>> max(num)
3088
>>> min(num)
20
>>> str = [100,abc,230,xyz]
2.3 列表
2.3.1 list函数
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
>>> list('')
['', '', '', '', '', '']
2.3.2 列表的基本操作
1.改变列表:元素赋值
2.删除元素:del
>>> x = [1,2,3,45,32]
>>> x[1]
2
>>> x[1] = 243 #直接赋值改变元素
>>> x
[1, 243, 3, 45, 32]
>>> del x[1] #删除元素
>>> x
[1, 3, 45, 32]
3.分片赋值:
>>> name = list('perl')
>>> name
['p', 'e', 'r', 'l']
>>> name[2:]
['r', 'l']
>>> name[2:] = list('ar') #程序可以一次为多个元素进行赋值
>>> name
['p', 'e', 'a', 'r']
>>> num = [1,5]
>>> num[1:1] = [2,3,4] #分片替换可以在不需要替换任何原有元素的情况下插入新的元素
>>> num
[1, 2, 3, 4, 5]
>>> num[2:3] = [] #当然也可以用来批量删除元素
>>> num
[1, 2, 4, 5]
2.3.3 列表方法
1.追加:append
>>> test = [1,2,3]
>>> test.append('abc')
>>> test
[1, 2, 3, 'abc']
>>> test.append(5)
>>> test
[1, 2, 3, 'abc', 5]
2.统计:count
>>> a = [1,234,21,34,[123,1],1,2]
>>> a.count(1)
2
>>> a.count([123,1])
1
3.扩展:entend
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6] #a的值已经被改变
>>> a + b #a的值并未被改变
[1, 2, 3, 4, 5, 6, 4, 5, 6]
>>> a[len(a):] = b #可以用分片赋值来实现相同的操作,但不推荐使用
>>> a
[1, 2, 3, 4, 5, 6, 4, 5, 6]
4.索引:index
>>> test = ['This','is','a','test']
>>> test.index('test')
3
>>> test.index('q')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.index(x): x not in list
5.插入:insert
>>> num
[1, 2, 4, 5]
>>> num.insert(3,'test')
>>> num
[1, 2, 4, 'test', 5]
6.移除:pop
>>> num
[1, 2, 4, 'test', 5]
>>> num.pop()
5
>>> num.pop(3)
'test'
>>> num
[1, 2, 4]
>>> num
[1, 2, 4]
>>> num.append(num.pop())
>>> num
[1, 2, 4]
7.移除:remove
>>> x = "to be or not to be".split()
>>> x
['to', 'be', 'or', 'not', 'to', 'be']
>>> x.remove('to')
>>> x
['be', 'or', 'not', 'to', 'be']
>>> x.remove('bee')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
8.反向存放:reverse
>>> x
['This', 'is', 'a', 'test']
>>> x.reverse()
>>> x
['test', 'a', 'is', 'This']
9.排序:sort
>>> x = [1,2,5,3,7,4,9,8,0]
>>> x.sort()
>>> x
[0, 1, 2, 3, 4, 5, 7, 8, 9]
>>> x = "This is a test".split()
>>> x.sort()
>>> x
['This', 'a', 'is', 'test']
>>> x = [1,2,5,3,9]
>>> y =sorted(x)
>>> x
[1, 2, 5, 3, 9]
>>> y
[1, 2, 3, 5, 9]
>>> x = [1,2,5,3,7,4,9,8,0]
>>> y = x
>>> y.sort()
>>> x
[0, 1, 2, 3, 4, 5, 7, 8, 9]
>>> y
[0, 1, 2, 3, 4, 5, 7, 8, 9]
10 高级排序
>>> cmp(32,42)
-1
>>> cmp(-1,1)
-1
>>> cmp(1,-1)
1
>>> cmp(1,1)
0
>>> numbers = [2,5,9,7]
>>> numbers.sort(cmp)
>>> numbers
[2, 5, 7, 9]
>>> x=['address','abalone','acme','add','aerate']
>>> x.sort(key=len)
>>> x
['add', 'acme', 'aerate', 'address', 'abalone']
>>> x = [4,6,1,7,9]
>>> x.sort(reverse=True)
>>> x
[9, 7, 6, 4, 1]
2.4 元组:不可变序列
>>> 1,2,3 #定义一个元组
(1, 2, 3)
>>> (1,2,3,4)
(1, 2, 3, 4)
>>> () #一个空元组
()
>>> 42, #只含有一个值的元组
(42,)
>>> 42
42
>>> 3*(40+2)
126
>>> 3*(40+2,)
(42, 42, 42)
2.4.1 tuple函数
>>> tuple([1,2,3,4])
(1, 2, 3, 4)
>>> tuple((1,2,3,4))
(1, 2, 3, 4)
>>> tuple('addrss')
('a', 'd', 'd', 'r', 's', 's')
2.4.2 基本元组操作:
>>> x = 1,2,3
>>> x[1]
2
>>> x[0:2]
(1, 2)
2.4.3 元组的意义何在?
2.5 小结
函数 | 描述 |
cmp(x,y) | 比较两个数的值 |
len(seq) | 返回序列的长度 |
lsit(seq) | 把序列转化为列表 |
max(args) | 返回序列或参数集合中的最大值 |
min(args) | 返回序列或参数集合中的最小值 |
reverse(seq) | 对序列进行反向迭代 |
sorted(seq) | 返回已排序的包含seq所有元素的列表 |
tuple(seq) | 把序列转化为元组 |
python笔记02:列表与元素的更多相关文章
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- (python函数02)列表生成式
(python函数02)列表生成式 示例代码 num = [i for i in range(1, 10)] print(num) num = [i for i in range(1, 10) ...
- 我的Python笔记02
声明:本文整理借鉴金角大王的Python之路,Day2 - Python基础2,仅供本人学习使用!!! 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表. ...
- python笔记-list列表的方法
#!usr/bin/python # -*- coding: utf-8 -*- # 存储5个人的年龄,求他们的平均年龄 age1 = 18 age2 = 15 age3 = 38 age4 = 20 ...
- python笔记之列表
python中列表使用list类. 创建一个列表:list1 = [1,2,3,4]使用逗号隔开每个元素,使用方括号包含起来,创建空列表直接使用list2 = [] #!/usr/bin/env py ...
- python笔记之列表与元组函数和方法使用举例
在学习列表之前先了解了raw_input和input的区别:(仅适用于版本2,版本3中raw_input和input合并,没有raw_input) input的语法为:input("str& ...
- 第二周Python笔记 数据类型 列表 字典
列表,拉锁式儿合并. [ [a,b] for a,b in zip(list1,list2)] #最笨的 a=[1,2,3,4,5] b=[2,3,4,5,6] d=[] for i in range ...
- Python笔记 #02# Inner workings of lists
源:DataCamp datacamp 的 DAILY PRACTICE + 日常收集. List of lists Subset and conquer Slicing and dicing Li ...
- python笔记-02
Python基础知识 —————————————— A,B,先把A乘以3,然后加上B,最后在加上列表A A = [1, 2, 3, 4, 5, 6] 赋值 B = [1, 2, 3] 变量 定义一个变 ...
随机推荐
- thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?
在线编辑器有很多很多, 而且大多是开源的. uediotr基于mit协议, 开源, 可以用于商业和非商业的 任意使用和修改都可以 如果两个相连接的 相邻的 元素之间 因为边框重叠 而显得中间的边框线很 ...
- Java 多线程中的任务分解机制-ForkJoinPool,以及CompletableFuture
ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行:当多个“小任务”执行完成之后,再将这些执行结果 ...
- Java ServletContext详解
转载: ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而servletConte ...
- 51nod 1444 破坏道路(最短路)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1444 题意: 思路: 哇,思路爆炸. 因为每条边的权值都为1,所以可以直 ...
- Vhost.conf 范例
NameVirtualHost *:80 <VirtualHost *:80> ServerName haofei.com DocumentRoot "E:/test/" ...
- rostopic 命令
rostopic bw display bandwidth used by topic// rostopic delay display delay for topic which has heade ...
- 安装cartographer_ros
这里使用的是hitcm(张明明)的github地址,由于google官方的教程需要FQ下载一些文件,因此容易失败,经验证hitcm(张明明)对原文件进行了少许修改后可以成功安装,在他的修改中核心代码不 ...
- 《WAP团队项目软件设计方案》
WAP团队项目软件设计方案 一.根据OOD详细设计工作要点,修改完善团队项目系统设计说明书和详细设计说明文档的GitHub地址:https://github.com/LVowe999/-7.git 在 ...
- 使用tk.mybatis快速开发curd
使用mybatis已经是可以快速开发程序了,对于单表的curd似乎是一种可抽象的结果,下面介绍tk.mybatis的使用方式. maven引用 我使用的是这个版本,所以相关功能介绍也是这个版本. 使用 ...
- Hashtable、HashMap、TreeMap心得
三者均实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值. (1) 元素特性 HashTable中的key.value都不能为null; ...