Python——列表与元组

列表

在学习列表之前先了解一下什么是序列。

序列:成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列。

序列数据类型包括:字符串,列表,和元组类型。

序列的特点: 成员关系操作符(in , not),连接操作符(+),重复操作符(*),索引与切片操作符。

1.列表的创建

列表也是数组的一种形式,但是数组和列表有什么不同呢?

数组:存储同一种数据类型的集和。例如:scores=[12,95.5]

列表(打了激素的数组):可以存储任意数据类型的集和。例如:li=[25,40,'hello']

  • 创建一个空列表     list = []    
  • 创建一个包含元素的列表,元素可以是任意类型,包括数值类型,列表,字符串等均可, 也可以嵌套列表。   

        例如: list = ["fentiao", 4, 'gender']                   list = [['粉条', 100], ["粉丝", 90], ["粉带", 98]]

2.列表的特性

练习1 (成员操作符)

根据指定月份,打印该月份所属的季节。   

 提示: 3,4,5 春季 6,7,8 夏季  9,10,11 秋季 12, 1, 2 冬季     

考察点: 列表的成员操作符, if判断语句

 

代码如下:

while True:
    month = input('月份(q退出):')
    # if month in ['3','4','5']:
    if month in '345':
        print("春季")
    elif   month in '678':
        print("夏季")
    elif   month in ['9', '10', '11']:
        print("秋季")
    elif   month in ['12', '1', '2']:
        print("冬季")
    elif month == 'q':
        print("查询结束......")
        break
    else:
        print("请输入正确的月份")

结果示例:

练习2 (连接操作符,索引和切片)

假定有下面这样的列表:     names = ['fentiao', 'fendai', 'fensi', 'apple']    

要求输出结果为:'I have fentiao, fendai, fensi and apple.'

 

代码如下:

names = ['fentiao', 'fendai', 'fensi', 'apple']
# 列表切片和索引的掌握案例;
print('I have ' + ",".join(names[:-1]) + ' and ' + names[-1] + '.')

输出结果为:

3.列表的操作(增加、删除、修改、查找)

1)元素的增加方法(.append    .extend   .insert)

  • 列表可通过append追加一个元素到列表中。

例如:

  • 列表可通过extend方法拉伸,实现追加多个元素到列表中

例如:

  • 指定位置添加元素可以使用insert方法

例如:

2)元素的删除方法(.remove   .pop   .clear)

  •  list.remove()   删除列表中的指定元素。  
  • list.pop()   弹出, 默认删除最后一个元素; 当然可以通过传索引值去指定要删除的元素。  
  • list.clear: 清空列表里面的所有元素。

例如:

3)列表的修改(通过索引和切片)

修改列表的元素:直接通过索引和切片重新赋值就可以实现修改。

例如:

4)列表的查找(.index   .count)

  • 查看某个列表元素的下标(索引值)用index方法,默认从索引值0处开始依次查找,要查找的元素后可以跟两个数字,表示从指定位置开始查找到指定位置结束;   
  • 查看某个列表元素出现的次数用count方法

例如:

5)其他操作

  • .copy   可以复制列表到一个新的列表中
  • .sort   对列表中的数字进行从小到大重新排序

4.补充说明

1) is和==的区别

is和==两种运算符在应用上的本质区别是什么?

  1.  Python中对象的三个基本要素,分别是:id(内存位置)、type(数据类型)和value(值)。
  2.  is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
  3.  ==用来比较判断两个对象的value(值)是否相等;(比较type和value)      
  4. is也被叫做同一性运算符, 会判断id是否相同;(比较id, type 和value)

例如:

a = [1,2,3]
b = [1,2,3]
a == b
Out[3]: True
a is b
Out[4]: False
id(a)
Out[5]: 139715958128456
id(b)
Out[6]: 139715958186248
a=1;b='1'
a == b
Out[7]: False

 

2)深拷贝和浅拷贝

赋值: 创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。(=)

浅拷贝: 对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(li.copy(), copy.copy())

  • 公用一个值;
  • 这两个变量的内存地址一样;
  • 对其中一个变量的值改变,另外一个变量的值也会改变;

例如:

scores = [100, 100, [100, 100, 100]]
scores1 = scores[:]
print(scores, id(scores))
print(scores1, id(scores1))

scores[-1][0] = 200
print(scores)
print(scores1)

#浅拷贝第2种实现方式
import copy

scores2 = copy.copy(scores)
print(scores, id(scores))
print(scores2, id(scores1))
scores[-1][0] = 200
print(scores)
print(scores2)

输出结果为:

深拷贝: 一个变量对另外一个变量的值拷贝。(copy.deepcopy())

  • 两个变量的内存地址不同;
  • 两个变量各有自己的值,且互不影响;
  • 对其任意一个变量的值的改变不会影响另外一个

例如:

import copy

scores = [100, 100, [100, 100, 100]]
# 深拷贝
scores1 = copy.deepcopy(scores)
print(scores, id(scores))
print(scores1, id(scores1))
scores[-1][0] = 200
print(scores)
print(scores1)

输出结果为:


元组

元组可以说是带了紧箍咒的列表,因为元组是不可变的。

1.元组的创建

  •  定义空元组     tuple = () 
  • 定义单个值的元组     tuple = (fentiao) 
  • 一般的元组     tuple = (fentiao, 8, male)

注意: 不能对元组的值任意更改

2.元组的特性

元组和列表的特性一样,都有连接操作符,重复操作符,成员操作符     索引, 切片。

但是元组有一个不一样的特性:多元赋值,对元组分别赋值,引申对多个变量也可通过元组方式分别赋值。方式如下:

3.元组的方法

  • t.count(value)-->int     返回value在元组中出现的次数;
  • t.index(value)     返回value在元组中的偏移量(即索引值)

4.命名元组

1)用法简介

Tuple还有一个兄弟,叫namedtuple。虽然都是tuple,但是功能更为强大。

collections.namedtuple(typename, field_names)   

其中         typename:类名称     

                field_names: 元组中元素的名称

2)定义命名元组类与应用

  • 命名元组是一个类,有两种方式来定义命名元组:

  • 实例化命名元组,获得类的一个实例:

  • 访问命名元组:通过逗号运算符和属性名来访问元组字段的值

例如:   user.name; user.age, user.id

3)命名元组的属性

  • 类属性 _fields:包含这个类所有字段名的元组

  • 类方法 _make(iterable):接受一个可迭代对象来生产这个类的实例

  • 实例方法_replace():用于修改实例的属性

下面是对命名元组的综合应用代码:

import collections

# 定义一个命名元组的类, 类名User, 属性有三个, 分别是'name', 'age', 'scores';
User = collections.namedtuple("User", ['name', 'age', 'scores'])
# 实例化一个类, 名字叫粉条, 等等其他信息;
user = User("粉条", 10, [100, 100, 100])
# 打印该对象的属性;
print(user)
print(user.name)
print(user.age)
print(user.scores)
# ****************************
print(user._fields)
user1 = User._make(['粉丝', 10, [100, 90, 90]])
print(user1)
# 间接改变属性信息;
user2 = user1._replace(name="粉带")
print(user2)

输出结果为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值