返回到Python知识体系

本节学习目的:

掌握数据结构中的列表和元组

应用场景:

编程 = 算法 + 数据结构

数据结构: 通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些元素可以是数字或者字符,或者其他数据结构.

容器: 序列,映射,集合是三种比较常见的数据结构

序列: 每个元素都有一个编号,也叫做索引

映射: 每个元素都有一个名字,称为键值对

集合: 内部元素都是不重复的

联系本文作者交流或者索取相关代码及软件请加入QQ群:小马哥的技术分享 413939157.

(一)   序列概览

内建序列种类

列表和元组区别

列表和元组的应用场景

1,使用元组作为字典的键,因为键不可修改,所以就不能使用列表

2,需要操作一组数值的时候,序列很好用

序列里面也可以包含其他序列

(二)   序列通用操作

2.1   索引

序列的特点就每个元素都有自己位置的编号,并且编号是在0开始的,用于找到某个位置上的元素.

正号索引: 开头第一个元素,索引为0开始

负号索引: -1代表倒数第一个元素,-2代表倒数第2个元素,依次类推.

实例2.1.1

greeting = 'hello world'
print(greeting[0])

print(greeting[-1])

案例2.1.2
接收控制台输入年月日,打印年月日的英文格式.
'''
1,
输入年月日
    定义年月日三个变量分别接收输入
    定义两个序列分别存储对应的英文月日
2,格式化: 怎样对输入的月数字,转变为英文-->索引
'''
year = input("请输入年: ")
month = input("请输入月份(1-12): ")
day = input("请输入日期(1-31): ")
e_month = ['January','February','March','April','May','June','July','August','September','October','November','December']
e_day = ['st','nd','rd']+17*['th']+['st','nd','rd']+7*['th']+['st']
e_date = e_month[int(month)-1]+' '+e_day[int(day)-1]+' '+year
print(e_date)

2.2   分片

应用场景: 索引仅仅是取一个元素,如果要一次取一定范围内的多个元素呢?

使用方法: 冒号分割的两个索引表示边界范围,[开始索引: 结束索引]  <-注意不包括结束索引位置上的元素

实例2.2.1 分片

greeting = 'hello world'   #字符串长度是11
print(greeting[0:1])
print(greeting[0:11])

问题: 如果对分片修改会修改原字符串吗?

实例2.2.2 访问最后面n个元素

numbers = [1,2,3,4,5,6,7,8,9,10]
print(numbers[7:11])
# [8, 9, 10]   访问序列的后面三个元素
print(numbers[-1:-3])
# [] 没有数据的原因: 左边界索引一定要小于右边界索引
print(numbers[-3:-1])
# [8, 9] 只有两个元素的原因: 半开半闭区间,只包括左边界索引位置上的元素,不包括右边界索引位置上的元素
print(numbers[-3:])
# [8, 9, 10] 缺省写右边界索引: 这样范围就是默认取到最后一个元素
print(numbers[:-1])
# [1, 2, 3, 4, 5, 6, 7, 8, 9] 缺省写左边索引: 范围默认在第一个元素开始取
print(numbers[:])
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  两个边界都缺省: 范围就是全部了

上面的分片都是挨个取元素,也就是步长为1,还可以设定步长取出元素

#默认步长的分片如上面,其实是缺省了一个参数
print(numbers[0:11:1])
#设定步长的分片
print(numbers[0:11:2])

2.3   相加/连接

本质: 连接操作

操作: 连接操作

print([1,2,3,4,5]+[6,7,8,9,10])
print('hello '+ 'world')
print([1,2,3,4,5]+'hello world')# 注意:这里是要抛错的,Python是强数据类型,也就是不会自动隐式转换数据类型,所以在这里只有两种相同数据类型的序列才能相加

2.4   乘法

其实在上面已有例子使用到了数列的乘法,本质上就是多个数列相加

  [1,2,3,4,5]*10

  ‘string’*10

实例2.4.1 创建一个10个元素的序列,但是里面上面都不存

   [none]*10

  none = [None]*10

  print(len(none))  #现在还学到长度,这是我猜的一个函数

2.5   成员资格

用于检查某个元素是否属于序列的成员,使用布尔运算符in

返回值成为布尔值: 条件为真返回True,为假返回False.

print(None in none)    #返回True
print('P' in  'python')  #返回False
 
# 查看用户名和密码是否存在
accout = [['mali','123'],['hadoop','java'],['spark','scala'],['ml','python'],['google','go']]
print(['mali','123'] in  accout)      #返回True
print('mali' in  accout)              #返回False 

2.6   长度,最小值,最大值

查看列表长度: len函数

min函数: 序列中最小的元素

max函数: 序列中最大的元素

实例2.6.1

  print(len(account))

 print(max(account))
 print(min(account))
 

  >>> max('java','Java','scala','python')

  'scala'

  >>> min('java','Java','scala','python')

  'Java'

(三)   列表

3.1 列表的特点

字符串不能修改,于是可以将字符串转变为列表处理

列表是可以对元素进行增删改查的

3.2 list函数

先看如下代码,可以对字符串进行拼接,可以根据索引查询字符串

content = "hello python"
print("a"+"b")
print(content+'a')
print(content[0])

但是,如果修改字符串某个位置上的字符是否能成功呢?

  >>> content = "hello python"

  >>> content[0]='a'

  Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  TypeError: 'str' object does not support item assignment

结果是直接抛错

如何满足修改字符串的需求呢?

list函数可以将一个字符串转成一个列表类型,其实这个强转’123’到123一样的道理: int(‘123’)

  >>> list(content)

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

3.3 基本的列表操作

前面序列的通用操作中各种方法都适用于list,并且list还有自己的独特操作,上面字符串不能修改,list可以修改就是一种,还有下面的

  1. 修改列表元素

  >>> list(content)

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> chars = list(content)

  >>> chars

  ['h', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> chars[0] = 'H'

  >>> chars

  ['H', 'e', 'l', 'l', 'o', ' ', 'p', 'y', 't', 'h', 'o', 'n']

注意: 不能为一个位置不存在的元素进行赋值

>>> len(chars)

  12

  >>> chars[12]='!'

  Traceback (most recent call last):

   File "<stdin>", line 1, in <module>

  IndexError: list assignment index out of range

  1. 删除元素

使用del函数

>>> nums = [1,2,3,4,5,6]

>>> nums

[1, 2, 3, 4, 5, 6]

>>> del(nums[5])

>>> nums

[1, 2, 3, 4, 5]

>>> len(nums)

5    #长度变为5

  1. 分片赋值

作用: (1)同时为多个元素进行赋值; (2)替换;(3)还可以用来插入;

实例1: 赋值与追加

>>> name = list("hadoop")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p']

  >>> name[6:] = list("空格java")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

实例2: 替换/修改元素

>>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'j', 'a', 'v', 'a']

  >>> name[7:] = list("python")

  >>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

实例3: 插入元素

>>> name

  ['h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

  >>> name[0:0] = list('hello ')  #因为分片是半开半闭区间,所以这个时候分片是空的,这个操作也就变成插入了

  >>> name

  ['h', 'e', 'l', 'l', 'o', ' ', 'h', 'a', 'd', 'o', 'o', 'p', ' ', 'p', 'y', 't', 'h', 'o', 'n']

分片也是可以用来删除的,del函数

3.4 列表方法

方法: 通过对象调用的函数

使用: 对象.方法(参数)

1,append

2,count

3,extend

4,index

5,insert

6,pop

7,remove

8,reverse

9,sort

10,高级排序

(四)   元组

定义: tuple也是序列,和序列中的列表list不同的是,元组tuple不能修改(字符串也是不能修改的)

使用:

创建一个tuple,通过圆括号定义,或者直接逗号分隔的一些值

>>> 1,2,3

  (1, 2, 3)

  >>> ('a','b','c')

  ('a', 'b', 'c')

  >>> t1 = ('java','scala','python','go','javascript')

  >>> t1

  ('java', 'scala', 'python', 'go', 'javascript')

  >>> type(t1)

  <class 'tuple'>

空元组: ()

>>> type(())

  <class 'tuple'>

特别注意: 一个元素的元组,也是元组,但是形式要特别注意

>>> a = ('a')    #虽然也包括在圆括号里面,但是检查类型, 是str

>>> type(a)

  <class 'str'>

  >>> b = ('b',)       #尽管只有一个元素,也要加上逗号

  >>> type(b)

  <class 'tuple'>

再例如:

>>> 100      #这是一个数

  100

  >>> 100,       #加上逗号,这是一个元组

  (100,)

再看一个例子:

>>> 10*(100+100)   #在这里没有逗号,属于四则运算,括号输入运算符号

  2000

  >>> 10*(100+100,)       #在这里有逗号,属于元素,对里面的元素进行拼接

  (200, 200, 200, 200, 200, 200, 200, 200, 200, 200)

tuple函数

tuple函数和list函数一样,将参数(参数在这里是序列)转换为元组,其实就是类型转换

>>> ittech = ['hadoop','spark','storm','kylin','hive','hbase']

  >>> ittech

  ['hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase']  #注意括号: 是中括号

  >>> type(ittech)

  <class 'list'>  #注意这里

  >>>

  >>> t_ittech = tuple(ittech)

  >>> t_ittech

  ('hadoop', 'spark', 'storm', 'kylin', 'hive', 'hbase')      #注意括号: 是圆括号

  >>> type(t_ittech)

  <class 'tuple'>     #注意这里

基本元组操作

元组只有创建和访问操作.访问操作和其他序列一样,通过索引访问,也有分片访问操作

元组的存在意义

在映射中当做键使用,不可以被改变

返回到Python知识体系

联系本文作者交流或者索取相关代码及软件请加入QQ群:小马哥的技术分享 413939157.

Python基础学习 -- 列表与元组的更多相关文章

  1. python基础之列表list元组tuple

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7041763.html python基础之列表list元组tuple 列表li ...

  2. python基础4 列表和元组

    一. 列表列表:python基础数据类型之一:其他语言中也有列表的概念,js 数组,可索引,可切片,可加步长li = ['hello', 100, True, [1, 2, 3], {'name':' ...

  3. python基础之 列表,元组,字典

    other help(str.strip) #查看是否有返回值以及返回值类型[] :称为索引操作符 1.列表 列表相比字符串来说能存储大量数据的python的基本数据类型,并且也拥有字符串的一些方法( ...

  4. Python基础学习-列表基本操作

     列表:Python的“苦力”.   列表不同于元组和字条串的地方:列表是可变的——可以改变列表的内容,并且列表有很多有用的.专门的方法. 1.list函数 因为字符串不能像列表一样被修改,所有有时根 ...

  5. python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  6. python基础之列表、元组

    一.列表 列表(list)是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 作用:多个装备,多个爱好,多门课程,多个女朋友等 定义:[ ]内可以有多个任意类型的值,逗号 ...

  7. Python基础之列表、元组、字典、集合的使用

    一.列表 1.列表定义 names=["Jhon","Lucy","Michel","Tom","Wiliam ...

  8. python基础学习之02 元组

    #encoding=utf-8 # 元组与列表一样,也是一种序列 print (1,2,3) print 1,2,3 print(1,) print 1, a=1 print(type(a)) a=1 ...

  9. Python学习【day03】- Python基础练习题(列表、元组、字典)

    #!/usr/bin/env python # -*- coding:utf8 -*- # 1.有两个列表 # l1 = [11,22,33] # l2 = [22,33,44] # a.获取内容相同 ...

随机推荐

  1. RSA加密通信小结(三)--生成加解密所需的SSL命令与流程

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  2. javaScript操作DOM对象(看三遍,敲三遍,写三遍! 不会你找我)!!

    DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API 使用javaScript操作DOM对象通常分为三类:1.DOM CORE        2.HTM ...

  3. 总结一下最近用过的phpcms语法

    到目前为止用到过的phpcms语法: 1.取栏目名称: {category[$catid][catname]} 2.取栏目地址: {category[14][url]} 3.取一级栏目: {pc:co ...

  4. 15套java架构师大型分布式综合项目实战、千万高并发-视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  5. php防止浏览器点击返回按钮重复提交数据

    <!--html中存放隐藏域数据--> <input type="hidden" value='{$sun_nums}' name='sub_nums' /> ...

  6. CSS学习笔记10 相对定位,绝对定位与固定定位

    文档流中的元素的位置由元素在 (X)HTML 中的位置决定,这就是最原始的普通流,前面讲到的浮动CSS学习笔记08 浮动可以改变元素在文档流中的位置,除了这个我们还可以通过使用CSS的position ...

  7. [leetcode-504-Base 7]

    Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...

  8. 【Android Developers Training】 103. 查询当前地点

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. Vivo展柜灯怎样设计才吸引大量客户?

    1.vivo展柜灯计划的目标是使消耗者在无限的时空中最无效地承受信息.因而,vivo展柜灯计划便是围绕着怎样无效地进步展现活动的服从和质量停止的.除了展现环境本身的计划之外,展现对象陈列方式的计划也是 ...

  10. 拥抱.NET Core系列:依赖注入(1)

    依赖注入时编程手段中解耦和封装的一个非常重要的手段,我本人已经到了没有DI无法编写项目的程度了,在.NET Framework中微软并没有在FCL中引入DI,虽然推出了"Unity" ...