第二章-列表和元组

2.0
      在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序列号-即元素的位置,

也称为索引。第一个索引是0,第二个是1,以此类推。


2.1 序列概览

Python一共有6种内建的序列

{

    列表,元组,字符串,Unicode字符串,buffer对象和xrange对象

}


2.2通用序列操作

    所有序列类型都可以进行某些特定的操作,这些操作包括:索引(indexing),分片(sliceing),加(adding),乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度,找出最大元素和最小的内建函数。

   

>>>strA="abcdef";
>>>strA[0]
'a'
>>>strA[-1]
'f'
>>>'Hello'[1]
'e'
>>> mark=input("aaaa:")[0]
aaaa:55
>>> mark
'5'

    下面是输入一个日期,整理后输出(没有什么特出月份的判断啥的,就是为了理解语法)

代码:
  

months=[
'1yue',
'2yue',
'3yue',
'4yue',
'5yue',
'6yue',
'7yue',
'8yue',
'9yue',
'10yue',
'11yue',
'12yue',
] 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)
month_name=months[month_number-1]
ordinal=day+endings[day_number-1]
print(month_name + ' ' + ordinal + ' ' + year)
input("Press<enter>") 运行结果:
Year:1
Month:(1-12)2
Day:(1-31)3
2yue 3rd 1
Press<enter>
<span style="font-size:18px;"><pre name="code" class="python">

<strong><span style="font-size:18px;">2.2.2分片(有点类似cmd里面的字符串处理)
分片就是对字符串进行截取处理,这个截取是很灵活的,不解释了,直接看例子吧。</span></span></strong>
<strong><span style="font-size:18px;">
</span></strong>

1.优雅地捷径 >>> web='<a href="http://www.python.org">Python web site</a>' >>> web[9:3] '' >>> web[9:30] 'http://www.python.org' >>> web[32:-4] 'Python
web site' >>> number=[1,2,3,4,5,6,7,8,9,10] >>> number[3:6] [4, 5, 6] >>> number[0:1] [1] >>> number[-3:-1] [8, 9] >>> number[-3:0] [] >>> number[-3:] [8, 9, 10] >>> number[3:] [4, 5, 6, 7, 8, 9, 10] >>> number[:3] [1, 2, 3] >>> number[:] [1, 2, 3, 4, 5, 6,
7, 8, 9, 10] >>> print(number[:]) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> 2.更大的步长 - 分片


>>> number[0:10:1]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> number[0:5:2]
[1, 3, 5]
>>> number[0:10:3]
[1, 4, 7, 10]
>>> number[3:6:3]
[4]
>>> number[::4]
[1, 5, 9]
>>> number[8:3:-1]
[9, 8, 7, 6, 5]
>>> number[3:8:1]
[4, 5, 6, 7, 8]
>>> number[10:0:-2]
[10, 8, 6, 4, 2]
>>> number[10:0]
[]
>>> number[10:0:-2]
[10, 8, 6, 4, 2]
>>> number[0:10:-2]
[]
>>> number[::-2]
[10, 8, 6, 4, 2]
>>> number[5::-2]
[6, 4, 2]
>>> number[5:]
[6, 7, 8, 9, 10]
>>> number[:5]
[1, 2, 3, 4, 5]
>>> number[:5:-2]
[10, 8]
>>> number[5::2]
[6, 8, 10]
>>> number[:5]
[1, 2, 3, 4, 5] <strong><span style="font-size:18px;"> 在这里要得到正确的分片结果需要动些脑筋。开始的元素(最左边元素)包括在结果之中,而结束点的元素(最右边的元素)则不在分片之内。当使用一个负数作为步长时,必须让开始点
大于结束点。在没有明确指定开始点和结束点的时候,正负数的使用可能会带来一些混淆。不过在这种情况下Python会进行正确的操作:对于一个正数步长,Python会从序列的头部开始向右提取
元素,直到最后一个元素;而对于负数步长,则是从序列的尾部开始向左提取元素,直到第一个元素。</span> <span style="font-size:18px;">2.2.3 序列相加
通过使用加号可以进行序列的连接操作</span></strong>
>>> [1,2,3]+[4,5,6]
[1, 2, 3, 4, 5, 6]
>>> 'Hellow' + 'World!'
'HellowWorld!'
>>> [1,2,3]+'world'
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
[1,2,3]+'world'
TypeError: can only concatenate list (not "str") to list <strong><span style="font-size:18px;">2.2.4乘法</span></strong>
>>> 'asd'*5
'asdasdasdasdasd'
>>> [15]*5
[15, 15, 15, 15, 15]
>>> sequence=[None]*10
>>> sequence
[None, None, None, None, None, None, None, None, None, None] <strong><span style="font-size:18px;">例子:打印一个盒子,然后在里面打印一行字</span></strong> sentence=input("sentence:")
screen_whdth=80
text_width=len(sentence)
box_width= text_width - 6
left_margin = (screen_whdth - 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()

<strong><span style="font-size:18px;">ps:效果特别不好,书上没算准,懒得去改了,就是想熟悉下语法,实现结果不重要</span>
<span style="font-size:18px;">
2.2.5成员资格(in 判断成员是不是在序列中)</span></strong>
permissions='rw'
'w' in permissions
'x' in permissions
users=['mlh' ,'foo' ,'bar']
input('enter your user name:') in users
subjuce='aada Get rich now!!! aada'
'aaa' in subjuce <strong><span style="font-size:18px;">例子
#检查用户名和PIN码 代码
</span></strong>
database = [
['albert' ,'1234'],
['sdfddd' ,'2345'],
['sdsddd' ,'4567'],
['sdasaw' ,'8658'],
]
username = input('User Name:')
pin = input('Pin code: ')
if([username,pin] in database):
print("ok")
else:
print("no"); 结果
>>>
User Name:albert
Pin code: 1234
ok
>>> <strong><span style="font-size:18px;">2.2.6 列表的长度、最小值和最大值</span></strong>
numbers = [100,34,678]
len(numbers)
max(numbers)
min(numbers)
max(2,3);
min(9,3,2,5) <strong><span style="font-size:18px;">2.3 列表:Python的"苦力"
列表不同于元组和字符串,列表本身是可以修改的,同时有它专门的好用的方法。 2.3.1 list函数
字符串创建列表</span></strong>
>>> list("Hello")
['H', 'e', 'l', 'l', 'o']
>>> aa = list("Hello")
>>> aa*3
['H', 'e', 'l', 'l', 'o', 'H', 'e', 'l', 'l', 'o', 'H', 'e', 'l', 'l', 'o']
>>> <strong><span style="font-size:18px;">2.3.2 基本的列表操作</span> <span style="font-size:18px;">1.列表是可修改的</span></strong>
x=[1,1,1]
x[1] = 2
print(x)
[1, 2, 1] <strong><span style="font-size:18px;">2.删除元素</span></strong>
[1, 2, 1]
>>> name = ['1' ,'2' ,'3']
>>> name
['1', '2', '3']
>>> del name[1]
>>> name
['1', '3']
>>> <strong><span style="font-size:18px;">3.分片赋值
例子</span></strong>
name=list('Perl')
print(name)
name[2:]=list('ar')
print(name)
结果
>>>
['P', 'e', 'r', 'l']
['P', 'e', 'a', 'r']
>>> <strong><span style="font-size:18px;">4.不等长替换</span></strong>
name=list('Perl');
name[1:] = list("ython");
print(name); <strong><span style="font-size:18px;">5.插入元素</span></strong>
numbers=[1,5];
numbers[1:1] = [2,3,4];
print(numbers); <strong><span style="font-size:18px;">6通过替换删除片段</span></strong>
numbers[1:4] = [];
print(numbers); <strong><span style="font-size:18px;">7.del删除片段</span></strong>
numbers = [1,2,3,4,5];
del numbers[1:2];
print(numbers); <strong><span style="font-size:18px;">2.3.3 列表方法
#1.append 在列表末端追加新对象</span></strong>
lst = [1,2,3]
lst.append(4)
print(lst) #2.count 方法统计某个元素在列表中出现的次数
print(['to','be','or','not','to','be'].count('to'));
x = [[1,2],1,1,[2,1,[1,2]]]
print(x.count(1));
print(x.count([1,2])); #3.extend方法可以在列表末尾一次性追加另一个序列中的多个值,用一个列表扩充另一个列表
a = [1 ,2 ,3];
b = [4 ,5 ,6];
a.extend(b);
print(a);
<strong><span style="font-size:18px;">#ps: a=a+b 的效率比a.extend(b)低,这个不解释了,很好理解,a=a+b要创建副本 #4.index 从列表中找出某个第一次匹配项的索引位置</span></strong>
knights = ['we' ,'are' ,'the' ,'knights' ,'who' ,'say' ,'ni'];
x = knights.index('who');
print(x);
x = knights.index('ss');
print(x);
输出:
4
Traceback (most recent call last):
File "C:/Users/King/Desktop/s.py", line 5, in <module>
x = knights.index('ss');
ValueError: 'ss' is not in list
>>>
<strong><span style="font-size:18px;">ps:找不到就异常了,额...感觉不是很科学
#5.insert 方法用于将对象插入到列表中</span></strong>
>>> numbers = [1,2,3,4,5,6,7]
>>> numbers.insert(3,'four')
>>> numbers
[1, 2, 3, 'four', 4, 5, 6, 7]
>>> #等价于
>>> numbers = [1,2,3,4,5,6,7]
>>> numbers[3:3] = ['four']
>>> numbers
[1, 2, 3, 'four', 4, 5, 6, 7]
>>> #但是没有insert直观
>>> <strong><span style="font-size:18px;">#6.pop 从列表尾部取出一个值 出栈
#Python里 列表+append+pop 可以模拟出来一个栈</span></strong>
x = [1 ,2, 3]
x.append(x.pop())
print(x)
[1,2,3]
<strong><span style="font-size:18px;">#ps: 如果想模拟队列就用 inset(0,...) pop(0) #7.remove 方法用于溢出列表中某个值得第一个匹配项</span></strong>
x = ['to' ,'be' ,'or' ,'not' ,'to' ,'be'];
x.remove('be');
print(x);
x.remove('bee');
<strong><span style="font-size:18px;">#移除不存在的依然报错 #8.reverse 方法将列表中的元素反向存放</span></strong>
x = [1,2,3];
x.reverse();
print(x);
<strong><span style="font-size:18px;">#ps 如果需要对一个序列进行反向迭代,那么可以使用reversed函数,这个函数并不会返回
#一个列表,而是返回一个迭代器(iterator)对象,尽管如此,使用list函数把返回的对象
#转换成列表也是可行的:</span></strong>
x = [1 ,2 ,3];
print(list(reversed(x))); <strong><span style="font-size:18px;">#9.sort排序</span></strong>
1.
>>> x = [5 ,4 ,3 ,2 ,1]
>>> y = x
>>> x.sort()
>>> x
[1, 2, 3, 4, 5]
>>> y
[1, 2, 3, 4, 5]
>>>
2.
>>> x = [3 ,2 ,1]
>>> y = x[:]
>>> x.sort()
>>> x
[1, 2, 3]
>>> y
[3, 2, 1]
>>>
<strong><span style="font-size:18px;">3.sorted函数</span></strong>
>>> x = [5 ,4 ,3 ,2 ,1]
>>> y = sorted(x)
>>> x
[5, 4, 3, 2, 1]
>>> y
[1, 2, 3, 4, 5]
>>>
<strong><span style="font-size:18px;">4.从大到小</span></strong>
>>> x = [5 ,2 ,3 ,4]
>>> x.sort()
>>> x.reverse()
>>> x
[5, 4, 3, 2]
>>>
<strong><span style="font-size:18px;">ps:也可以 sorted(x).reverse() ,但是x.sort().reverse()不行,因为x.sort()返回None,不能排序 #10.高级排序
1.首先,类似于c++里面的那个sort函数支持的cmp一样,这个也支持</span></strong>
numbers = [5 ,2 ,9 ,7];
numbers.sort(cmp);
numbers
[2 ,5 ,9 ,7]
<strong><span style="font-size:18px;">ps:前提是定义好cmp函数,不然运行出错,这个后面说</span></strong>
<strong><span style="font-size:18px;">
2.还有两个可选参数 key和reverse 一个是排序依据(key有点cmp的意思),另一个是方向</span></strong>
>>> x = ['111' ,'23213' ,'3']
>>> x.sort(key=len)
>>> x
['3', '111', '23213']
>>> x.sort()
>>> x
['111', '23213', '3']
>>> x.sort(reverse=True)
>>> x
['3', '23213', '111']
>>>
<strong><span style="font-size:18px;">
2.4元组是不能改变的列表,单个后面必须有,而且通常()包起来</span></strong>
>>> 1,2,3
(1, 2, 3)
>>> (1,2,3)
(1, 2, 3)
>>> ()
()
>>> ()*10
()
>>> (1,)*10
(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
>>> 3*(40+2)
126
>>> 3*(40+2,)
(42, 42, 42)
>>>
2.4.1 tuple函数,把序列转成元组
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple((1,2,3))
(1, 2, 3)
>>> <strong><span style="font-size:18px;">2.4.2 元组的基本操作
元组本身并不复杂,除了创建和访问之外没啥别的</span></strong>
>>> x = 1,2,3
>>> x
(1, 2, 3)
>>> y=(1,2,3);
>>> y[0:2]
(1, 2)
>>>


2.4.3 那么,元组到底有卵用?

1.元组可以在映射(和集合的成员)中当做键使用-而列表不行。

2.元组作为很多内建函数的返回值存在,也就是说必须对元组进行处理,只要不尝试修改元组,那么"处理"元组在绝大多数情况下就是把他们当做列表进行操作。一般来说,列表肯能更能满足对序列的所有需求。

 ps:

         我X,看了这两个不是理由的理由,真是觉得元组本身没什么卵用。只是没办法才使用,本来以为只读的有什么高效的地方。

  
  
 

Python 第二章-列表和元组的更多相关文章

  1. python基础教程-第二章-列表和元组

    本章将引入一个新的概念,:数据结构.数据结构是通过某种方式(例如对元素进行编号)组织在 一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在python中,最基本的数据结构 ...

  2. 《Python基础教程(第二版)》学习笔记 -> 第二章 列表和元组

    本章将引入一个新的概念:数据结构. 数据结构是通过某种方式阻止在一起的数据元素的集合,这些数据元素可以是数字或者字符,设置可以是其他数据结构. Python中,最基本的数据结构是序列(Sequence ...

  3. Python基础教程学习笔记:第二章 列表和元组

    1.序列中元素的索引: 第一个元素索引是0,第二个是1,依次递增 最后一个元素索引是-1,倒数第二个是-2,依次递减 2.序列(Sequence)的种类: 列表(list).元组(tuple).字符串 ...

  4. Python基础教程 读书笔记(2)第二章 列表和元组

    2.1序列概览 列表和元组的主要区别在于,列表可以修改,元组则不能.也就是说如果要根据要求来添加元素,那么列表可能会更好用;而出于某些原因,序列不能修改的时候,使用元组则更为合适.使用后者的理由通常是 ...

  5. python第二天 列表、元组

    今天学习了列表.元组相关的知识:与C中的数组列表相似,元组为只读列表: 以及切片相关操作: #!usr/bin/env python #-*-coding:utf-8-*- # Author calm ...

  6. 20190804-Python基础 第二章 列表和元组

    容器,Python支持一种数据结构的基本概念(容器,基本上就是可包含其他对象的对象.) 两种主要的容器是:序列(如列表和元组)和映射(如字典) Ps: 列表与元组区别,列表可修改,元组不能. 对序列的 ...

  7. 20190806-Python基础 第二章 列表和元组(3)元组&章小结

    元组,不可修改的序列(与列表的唯一差别) 1. 元组用圆括号括起,用逗号分隔 2. 如果只有一个值,也必须在后面加上逗号 print((42)) print((42,)) 结果: 42 (42,) p ...

  8. 20190805-Python基础 第二章 列表和元组(2)列表

    1. list函数,用于将字符串转换为列表 2. 基本的列表操作 修改列表 - 给元素赋值,使用索引表示法给特定的元素赋值,如x[1] = 2 删除元素 - 使用del语句即可 name1 = ['a ...

  9. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

随机推荐

  1. SpringBoot启动流程分析原理(一)

    我们都知道SpringBoot自问世以来,一直有一个响亮的口号"约定优于配置",其实一种按约定编程的软件设计范式,目的在于减少软件开发人员在工作中的各种繁琐的配置,我们都知道传统的 ...

  2. django Form 效验

    Django 登入效验 .py from django import forms from student import models from django.core.exceptions impo ...

  3. 漏洞复现-CVE-2015-1427-Groovy远程代码执行

          0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 Elasticsearch 1.3.0-1.3. ...

  4. CVE-2015-1635-HTTP.SYS远程执行代码

    这个漏洞刚好是在挖SRC的时候找到的,漏洞危害能打到服务器蓝屏,以下只作验证 参考 https://www.jianshu.com/p/2e00da8a12de https://blog.csdn.n ...

  5. 计算机二级Python学习笔记(一):温度转换

    今天通过一个温度转换的十行代码,理解了一些Python的基本元素. 所谓温度转换,就是摄氏度和华氏度的转换,要求输入摄氏度,可以输出华氏度,反之一样能实现.代码如下: #TempConvert.py ...

  6. 【python】虚拟环境管理之 virtualenv 、pipenv

    虚拟环境介绍 应用场景 python在安装第三方包时,会被pip安装到/site-package下,如果我们需要同时维护多个python项目,那这些项目都会共用一个python,而真实需求是多个项目之 ...

  7. 【vscode】【python】自定义代码自动补全

    引自:https://blog.csdn.net/Kyrielong/article/details/88058884 { "python.jediEnabled": true, ...

  8. Codeforces Round #575 (Div. 3) D2. RGB Substring (hard version) 【递推】

    一.题目 D2. RGB Substring (hard version) 二.分析 思路一开始就想的对的,但是,用memset给数组初始化为0超时了!超时了! 然后我按照题解改了个vector初始化 ...

  9. Codeforces 784B Santa Claus and Keyboard Check

    题面: 传送门 B. Santa Claus and Keyboard Check Input file: standard input Output file: standard output Time ...

  10. Co-prime HDU - 4135

    题目链接:https://vjudge.net/problem/HDU-4135#author=0 题意:求在区间[a,b]中有多少个数与n互质. 思路:先看数据范围很大,所以不能枚举.因为互质难求, ...