python基础 --02
常见的数据类型
列表
在python中,列表的创建可以是由[]两个方括号组成的。在其他语言中,被称之为数组。
列表里可以存放一组值,并且系统默认的给列表里的每一个元素以索引值,方便查找和使用。
如下:
#创建一个列表,并且保存一定的数据 user_list = ['刘德华','张学友','张靓颖','郭富城','李白'] print(user_list) #['刘德华', '张学友', '张靓颖', '郭富城', '李白'] #根据索引值来读取数据
print(user_list[0])#刘德华
我们在实际的应用中,可以非常方便的通过索引值来取出自己想要的值。
此时,如果需要在列表中取出多个连续的值,可以采用下面的写法:
#创建存储了多个值得列表 start_list = ['刘德华','张学友','张靓颖','郭富城','李白'] #此时,需要取出 张学友到郭富城
s_list = start_list[1:4] print(s_list) # ['张学友', '张靓颖', '郭富城']
在上面的代码中,在取值的时候,我们使用了1:4,索引值从张学友的1到李白的4,但是李白却没有被选取到,此时的原则是顾头不顾尾
而这样的一种操作,我们称之为切片
Tip:在进行切片 操作后,并不会改变原本的数组。
那么从左边开始取值,索引值从0开始,如果从右边开始取值,索引值从-1开始。
如果需要从右向左取值,有一点需要注意,例如:
#创建存储了多个值得列表 start_list = ['刘德华','张学友','张靓颖','郭富城','李白']
想要取值从右向左李白到张靓颖,写法如下:
n_list = start_list[-3:] print(n_list)
从右向左,李白是-1 ,那么将-1省略,要取值到张靓颖,那么张靓颖的索引为-3,那么就写成[-3:] 。
同理,如果从左向右取值,前面如果是0,也是可以省略的。
追加
如果我们需要给列表里面追加一些元素,可以使用append方法,向列表的最后追加一些元素。
#创建一个列表
user_list = ['宋小宝','赵四','刘能','小沈阳'] #向列表中追加元素 user_list.append('赵本山') #检测原列表是否被改变
print(user_list)
输出的结果:
['宋小宝', '赵四', '刘能', '小沈阳', '赵本山']
新追加的内容已经被追加到列表的最后。
如果需要将某个元素插入到某个元素之前,可以使用insert方法。
如下:
user_list = ['宋小宝','赵四','刘能','小沈阳'] #将添加的内容添加到赵四的前面
user_list.insert(1,'赵本山')
print(user_list)
结果如下:
['宋小宝', '赵本山', '赵四', '刘能', '小沈阳']
新的数据已经添加成功。
改
如果需要修改列表中的某一项,可以直接通过索引值找到元素并且直接赋予新值即可。
如下:
user_list[0] = '二人转'
删除
如果需要删除列表中的元素,可以采用remove ,del 或者pop方式。
remove方法:
#创建一个列表
user_list = ['测试1','测试2','测试3','测试4'] #使用remove方式删除元素
user_list.remove('测试1') print(user_list)
del方法:
#创建一个列表
user_list = ['测试1','测试2','测试3','测试4'] #使用del 方法删除
del user_list[1] print(user_list)
pop方法:
#创建一个列表
user_list = ['测试1','测试2','测试3','测试4'] #使用pop方法删除
user_list.pop() print(user_list)
Tip:上面的pop方法此时没有传递参数,会默认的把列表中最后一个值删除,当然,pop()方法中同样接受传入参数[列表的索引值],所以一旦pop传入了索引值,那么它的功能效果就等同于del方法。
总结
增
使用append方法,insert方法
删除
使用remove ,del以及pop方法
改
直接使用索引值找到元素并且赋予新值
查
通过索引值的方式可以查询数据
我们也可以通过index方法来查询某个元素的在列表中的索引值。
如下:
#创建列表
user_list = ['测试1','测试2','测试3'] index_user = user_list.index('测试2') print(index_user) #
在列表中,如果想要查看某个元素出现的次数,可以使用count方法
如下:
#创建列表
user_list = ['测试1','测试2','测试3','测试2','测试3'] # 使用count方法统计一个元素在列表中出现的次数
num = user_list.count('测试2')
print(num) # 2 表示测试2 出现了两次
清空列表
python中清空列表可以使用clear方法
如下:
#创建列表
user_list = ['测试1','测试2','测试3','测试2','测试3']
#使用clear方法清空列表
user_list.clear();
#检查列表是否被清空
print(user_list) #显示为[] ,说明列表已经被成功清空了
反转列表
python中反转列表使用reverse方法
如下:
#创建列表
user_list = ['测试1','测试2','测试3','测试2','测试3']
#使用reverse方法反转列表
user_list.reverse()
print(user_list)
排序
python中列表的排序可以使用sort方法
如下:
#创建列表
list = ['2Ceshi2','#Ceshi1','ACeshi3','aCeshi4'] list.sort()
print(list)
结果如下:
['#Ceshi1', '2Ceshi2', 'ACeshi3', 'aCeshi4']
那么排序的顺序其实是按照ASCII码的顺序进行排序。
合并列表
python中列表可以进行合并,使用extend方法
如下:
#创建列表
list = ['2Ceshi2','#Ceshi1','ACeshi3','aCeshi4']
#创建第二个列表
test_list = [1,2,3,4]
#将第二个列表合并到list列表中
list.extend(test_list) print(list,test_list)
上述代码中,test_list 顺利的被合并到list中,而原本的test_list列表依然存在。
删除整个列表
如下:
del 列表的名字
复制
python中,实现列表的复制,可以使用copy方法,而copy方法分为深层复制和浅层复制。
先来看下浅层复制:
'''
copy()方法 复制 浅层复制 列表中还可以存在列表,也可以存在其他的数据类型,而浅层复制指的是仅复制第一层,而第二层列表
中的内容仅复制指向内存地址的指针
''' # 创建一个列表
test_list = ['alex','LiBai','Zhangxueyou','Zhaosi'] test2 = test_list.copy() print(test2) #['alex', 'LiBai', 'Zhangxueyou', 'Zhaosi'] # 更改第一层列表中的某个元素值
test_list[0] = 'hello,world' # 检查是否更改成功
print(test_list) # 成功 #检查test2是否更改第一个元素
print(test2) # 第二个列表没有更改
此时在上面的代码中,列表test_list第一个值进行了更改,而test2列表复制过来的第一个值则没有更改。
如果列表test_list中还存在一个列表,在浅层复制的情况下,会出现如下的情况:
# 创建一个列表 - 并且列表中存在二级的列表
test_list = ['alex','LiBai','Zhangxueyou','Zhaosi',['Nihao','yanyan']] test2 = test_list.copy() # 第一个列表已经全部被复制了过来 # 更改第一个列表中子集列表的值
test_list[4][0] = ['NIHAO'] # 查看test2列表是否更改
print(test2)
发现此时test2列表已经更改:
['alex', 'LiBai', 'Zhangxueyou', 'Zhaosi', [['NIHAO'], 'yanyan']]
原因是此时的复制是浅层复制,只复制到了第一层,第二层里面的列表并没有进行复制,只是复制了一个指向内存方向的指针。
深层复制需要引入copy模块
代码如下:
import copy # 创建列表
list_user = ['alex','libai','zhaobenshan',['yanyan','yuping']] # 进行深层复制
new_list = copy.deepcopy(list_user) #print(new_list) # 复制成功 # 更改第一组列表
list_user[3][0] = "YANYAN" print(list_user)
print(new_list)
通过引入copy模块,并且使用deepcopy方法即可实现深层复制
循环列表
列表的循环使用for..in 即可。
代码如下:
# 创建列表
test_list = ['alex','libai','shaopengtao','wangmengchan'] for i in test_list:
print(i) # 循环成功
补充:代码切片
我们在打印列表的时候,可以使用切片的方式,例如
test_list = ['alex','libai','shaopengtao','wangmengchan']
有这样的一个列表,然后现在想将列表0到-1的位置进行切片,
print(0:-1)
那么此时如果想要在切片的基础上进行每两个选取一个,代码可以写成如下:
print(0:-1:2)
那么最终实现的效果如下:
['alex', 'shaopengtao']
那么在切片的过程中,如果开始或者结束的位置是0或者-1是可以被省略的,所以上面的代码就变成了如下:
print(::2)
结果同样是不变的。
知识点补充和总结:
上面我们说到,浅层复制的使用,其实在实际应用的情景下大概有三种方式可以实现浅层复制,例如下面的演示代码,将演示三种浅层复制的情况:
import copy
# 创建列表
test_list = ['name',['deposit',100]] '''
实现浅层复制的三种写法: copy方法
[:]
list
'''
'''
# 第一种方式,使用copy.copy
new_list = copy.copy(test_list)
print(new_list)
'''
'''
#第二种方式
new_list = test_list[:]
print(new_list)
''' #第三种方式
new_list = list(test_list)
print(new_list)
浅层复制的应用
例如,夫妻之间有一个共同的银行账户,里面有着共同的财产,其中一个人取钱或者存钱,那么另一放的余额显示肯定是要更改的。
代码如下:
# 创建列表,演示夫妻共用一个银行账户的需求 money = ['name',['deposit',2000]] # 创建两个不同的人
libai = money[:]
yanyan = money[:] #此时当丈夫libai 取了1000块
libai[0] = 'LiBai'
libai[1][1] = 2000 - 1000 yanyan[0] = 'Yanyan' # 此时无论是丈夫libai还是妻子yanyan的银行存款余额都会变少,因为二人共用一个账户
print(libai)
print(yanyan)
说的简单点,就是通过浅层复制来实现共享账号,当然,上面的应用只是简单的举个例子,在实际中,银行也不会将数据存储在列表中。
元组(tuple)
元组其实类似于列表,也就是存一组数,只不过它一旦创建,便不能再次修改,所以又叫做只读列表。
元组本身只能切片和查询但是不能够更改。
代码如下:
names = ('Alex','Libai','Jack')
在元组这个对象里面,只有两个方法,一个是count,一个是index。
小练习:购物车
需求:
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author:Li Bai # 创建列表
product_list = [
('Iphone',5800),
('Mac Pro',9800),
('Bike',800),
('Watch',10600),
('Coffee',31),
] # 创建一个空列表,用来存储用户购买的商品
shopping_list = [] salary = input('Input your Salary:')
# 判断用户输入的是否是数字
if salary.isdigit():
# 将用户输入的转换为int整型
salary = int(salary)
# 循环输出列表
while True:
# 输出商品列表中的内容和索引值
for index,item in enumerate(product_list):
# 输出
print(index,item)
user_choice = input('你好,请输入购买的商品序号:')
# 判断用户输入的是否为序号数字
if user_choice.isdigit():
user_choice = int(user_choice)
# 判断用户输入的商品序号是否是合理的
if user_choice < len(product_list) and user_choice >= 0:
print(user_choice)
p_item = product_list[user_choice]
# 判断用户的财产是否足够
if p_item[1] <= salary: # 买的起
shopping_list.append(p_item) # 将用户选取的商品存进shopp_list列表
salary -=p_item[1] # 将财产减去购买的商品列表
# 打印财产余额
print("Add %s into shopping cart ,your current balance is %s" %(p_item,salary))
else :
print('你的余额只剩%s,余额不足'% salary)
else :
print("product code [%s] is not exist!"% user_choice)
elif user_choice == 'q':
print("--------shopping list------")
for p in shopping_list:
print(p)
print("Your current balance:",salary)
exit()
else:
print("invalid option")
python基础 --02的更多相关文章
- python基础02 基本数据类型
摘要:简单的数据类型以及赋值 变量不需要声明 python的变量不需要声明,你可以直接输入: >>>a = 10 那么你的内存里就有了一个变量a, 它的值是10,它的类型是integ ...
- 0603 python 基础02
作业1:ANSI和utf8的区别? ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits). 可以表示的最大字符数是256,一般只用前128个(最高位为0),其中包括 ...
- python基础02—运算符与流程控制
运算符与流程控制 运算符 赋值运算 用'='表示,'='的左边只能是变量 算术运算 +.-.*:加.减.乘 /:除法运算,运算结果为浮点数 //:除法运算,运算结果为整数(商) %:求余 **:求幂 ...
- Python基础02
6.变量定义的规则: # 变量,只能由 字母 数字 下划线 特例:不能用数字开头 Python关键字,也不能使用 'and', 'as', 'assert', 'break', 'class', 'c ...
- Python 基础02 基本数据类型
简单的数据类型以及赋值 变量不需要声明 Python的变量不需要声明,你可以直接输入: >>> a = 10 那么你的内存里就有了一个变量a,它的值是10,它的类型是 integer ...
- Python基础02 变量
Python中的变量有两个特点: 1. 无需声明 a = 1 2. 不与类型绑定 a = 1 a = 'hello world' 变量名只是内存中具体对象的一个引用(reference). 对于 a ...
- python基础教程
转自:http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html Python快速教程 作者:Vamei 出处:http://www.cn ...
- python基础之02列表/元组/字典/set集合
python中内置的数据类型有列表(list)元组(tuple)字典(directory). 1 list list是一种可变的有序的集合.来看一个list实例: #第一种方法: >>&g ...
- Python基础教程-02
<Python基础教程> 第3章 使用字符串 字符串方法find返回的并非布尔值.如果find像这样返回0,就意味着它在索引0处找到 了指定的子串 join可合并一个字符串列表,不能合并数 ...
随机推荐
- Java ---Listener监听器
在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...
- socket编程之 select、poll、kqueue、epoll
原生API select int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct tim ...
- appium+python做移动端自动化测试
1 导言 1.1 编制目的 该文档为选用Appium作为移动设备原生(Native).混合(Hybrid).移动Web(Mobile Web)应用UI自动化测试的相关自动化测试人员.开发人员等提供 ...
- AngularJS创建新指令 - 函数功能
首先先介绍下AngularJS指令下的几种函数 Link函数和Scope 指令生成出的模板其实没有太多意义,除非它在特定的scope下编译.默认情况下,指令并不会创建新的子scope.更多的,它使用父 ...
- 多个php版本的composer使用
由于系统环境变量之前同事安装的laravel是5.1...php默认的环境变量是: 不想破话原有环境变量,因为现在新的项目是laravel5.4...所以在用默认composer require安装时 ...
- selenium + python 登录页面,输入账号、密码,元素定位问题
示例简介: 要求:登录QQ邮箱,输入账号.密码 出现问题:页面中含有iframe框架,因此直接进行元素的查找与操作,出现找不到元素的现象,首先需进行iframe框架的转换,使用switch_to_fr ...
- 《JavaScript面向对象编程指南(第2版)》读书笔记(二)
<JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...
- 单例模式——Java EE设计模式解析与应用
单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图 ...
- 基于ABP框架的权限设置
需求:在界面展示中,"定向包管理","竞价管理","竞拍管理","发布定向资源","添加竞价资源", ...
- 【转】10 条提升 Android 性能的建议
每个人都知道一个 App 的成功,与这个 App 的性能体验有着很密切的关系.但是如何让你的 App 拥有极致性能体验呢?在 DroidCon NYC 2015 的这个分享里,Boris Farber ...