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可合并一个字符串列表,不能合并数 ...
 
随机推荐
- 使用HTTP的同步方式还是异步方式?
			
同步与异步 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完 ...
 - Java -- 浅入Java反射机制
			
1,Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类. 在运行时构造任意一 ...
 - VS2017 Cordova Ionic2 移动开发-环境搭建
			
1. 文档概述 本文档用于说明Visual Studio 2017下使用 Ionic 2进行跨平台开发的运行环境配置. 2. 安装环境 Windows10 3. 安装 Visual Studio 20 ...
 - App字体大小不随系统改变而改变
			
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6713724.html 在 "设置" , "显示" , " ...
 - 我从现象中学到的CSS
			
文字溢出隐藏 如果你观察过浮动元素,你会发现这样一个事实,当前一个元素将宽度占满以后,后一个元素就会往下掉,如下所示 代码如下 <style> div,p{ margin:0; } #bo ...
 - Jquery Validation 验证控件的使用说明
			
转载自:http://blog.csdn.net/huang100qi/article/details/52453970,做了一些简化及修改 下载地址:https://jqueryvalidation ...
 - 使用Block传值
			
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...
 - Lucene工作原理
			
Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构.该结构及相应的生成算法如下: 0)设有两篇文章1和2 文章1的内容为:Tom lives in Guangzhou,I l ...
 - (知识点)JavaScript闭包
			
下面是我对闭包的理解:(把他们整理出来,整理的过程也是在梳理) 1.首先,在理解闭包之前: 我们首先应该清楚下作用域和作用域链 作用域:每个函数定义时创建时自己的环境即作用域 作用域链:函数内可访问自 ...
 - JQuery 根据ID在页面中定位
			
1.锚点跳转简介 锚点其实就是可以让页面定位到某个位置上的点.在高度较高的页面中经常见到.比如百度的百科页面,wiki中的page内容. 我知道实现锚点的跳转有两种形式,一种是a标签+name属性:还 ...