Python基本数据类型之list列表
列表是python中用的非常频繁的数据结构,它是有序序列。之前学的字符串就是一种有序序列。不过列表是可变的。
创建列表
li = list( ) #构造方法创建一个空列表
li = list( iterable_Object ) #以其它可迭代对象为参数初始化一个列表
li = [] #快捷方法创建一个空列表
li= [ i for i in range(1,11)] #推导式创建 非常的pythonic :)
if __name__ == "__main__":
li0 = []
print(len(li0)) # 0
li1 = list(")
print("li1 is ",li1) # li1 is ['1', '2', '3', '4', '5']
li2 = list(('init','by','tuple'))
print("li2 is ",li2) # i2 is ['init', 'by', 'tuple']
li3 = [i for i in range(1,11) if i%2==0]
print("li3 is ",li3) # li3 is [2, 4, 6, 8, 10]
li4 = [(i,j) "]
print("li4 is ",li4) #li4 is [('a', '1'), ('a', '2'), ('a', '3'), ('b', '1'), ('b', '2'), ('b', '3'), ('c', '1'), ('c', '2'), ('c', '3')]
1、可变的引用类型
可变是值列表对象本身可变。 支持追加,扩展,插入,删除,排序,反转等操作。
2、有序序列
列表是有序的,支持索引读写元素。当然也支持slice,详见我的另一篇随笔
3、元素类型任意
列表中的元素可以是任意类型,包括list类型,而且不同类型可以混合存在。
4、运算符
+
*
in
if __name__ == "__main__":
li = [1]+[2,3,4,5] #[1, 2, 3, 4, 5]
print(li)
li+=[6,7,8]
print(li) #[1, 2, 3, 4, 5, 6, 7, 8]
li = [1]*3
print(li) #[1, 1, 1]
print(1 in li) #True
5、内存模型
列表本身是不包含元素的数据的,而只是包含元素的引用。通过引用,再去访问元素实际指向的对象。
if __name__ == "__main__":
a = 100
str = "
li=[a,str]

再来通过一个深浅拷贝的例子深入说明
if __name__ == "__main__":
li = [[1,2],3]
li_copy = li.copy();
li_copy[0].pop()
print(li) #[[1], 3] 发现副本的变化使源本也改变了 print( id(li[0]) , id(li_copy[0]) ) #1037590501832 1037590501832,一样的地址

第一张图中我们说列表中保存的只是元素的引用而已,这个引用,换个说法就是指针。通过copy方法拷贝的是列表中的元素,也就是引用,同样也是地址。
上图中 li[0] 本身的值是 1037590501832 通过copy方法后,li_copy[0]也获得了li[0]本身的值,所以他也指向列表中的那个嵌套的小列表。
so,通过li_copy来改变那个嵌套的小列表,会反映到li中。
如果需要避免这个情况,我们可以使用深拷贝。
#/usr/bin/env python3
# coding:utf-8
import copy
if __name__ == "__main__":
li = [[1,2],3]
li_copy = copy.deepcopy(li)
li_copy[0].pop()
print(li) #[[1, 2], 3] 发现副本的变没有让源本改变
print( id(li[0]) , id(li_copy[0]) ) #1046997603464 1046997603528 地址不一样
6、常用API
li.append("1") #追加字符串"1"
li.extend([1,2,3]) #扩张列表,追加多个 ,等效于li +=[1,2,3]
li.insert(3,"hello") #插入
li.pop() #弹出最后一个元素
li.pop(1) #删除索引为1的 元素
li.remove(val) #根据值删除
li.index(val) #返回val元素的索引 没找到 则报错
li.sort() #排序,要求元素之间能比较。原地排序
sorted(li) #返回排序拷贝份,非原地排序
Python基本数据类型之list列表的更多相关文章
- Python基础数据类型(三)list 列表
3.4列表list [] 列表的格式 lst_l = [1,'123',[1,'www',2],'包青天'] 列表也有索引 print(lst_l[0]) print([-1][0:2]) #包青 切 ...
- Python基本数据类型之字符串、数字、布尔
一.数据类型种类 Python中基本数据类型主要有以下几类: Number(数字) String(字符串) Bool (布尔) List(列表) Tuple(元组) Sets(集合) Diction ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式
Python第三天 序列 5种数据类型 数值 字符串 列表 元组 字典 各种数据类型的的xx重写xx表达式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell ...
- Python特色数据类型(列表)(上)
Python从零开始系列连载(9)——Python特色数据类型(列表)(上) 原创 2017-10-07 王大伟 Python爱好者社区 列表 列表,可以是这样的: 分享了一波我的网易云音乐列表 今天 ...
- python基本数据类型之列表和元组
python基本数据类型之列表与元组 python中list与tuple都是可以遍历类型.不同的是,list是可以修改的,而元组属于不可变类型,不能修改. 列表和元组中的元素可以是任意类型,并且同一个 ...
- Python基础数据类型-列表(list)和元组(tuple)和集合(set)
Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...
- python 基础数据类型 之 列表
列表:定义 和特性 列表定义和创建: 定义:[,]内以逗号分隔,按照索引,存放各种数据类型,一般没有限制,每个位置代表一个元素 range_create = list(range(0, 10))pri ...
- Python基本数据类型--列表、元组、字典、集合
一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...
随机推荐
- Ajax过程
http://www.cnblogs.com/daicunya/p/6227550.html 1.创建XMLHttpRequest对象,也就是创建一个异步调用对象. 2.创建一个新的HTTP请求,并指 ...
- LightOJ1257 Farthest Nodes in a Tree (II)(树的点分治)
题目给一棵树,边带有权值,求每一点到其他点路径上的最大权和. 树上任意两点的路径都可以看成是经过某棵子树根的路径,即路径权=两个点到根路径权的和,于是果断树分治. 对于每次分治的子树,计算其所有结点到 ...
- BZOJ3630 : [JLOI2014]镜面通道
从左边不能到达右边当且仅当存在一条与上下底边相连的分割线将它们分开 设下底边为S,上底边为T,每个元件作为点,有公共部分的两个点互相连边 最后拆点求最小割 #include<cstdio> ...
- 【BZOJ】1854: [Scoi2010]游戏
http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题意:n个数据,每个数据有两个属性,要求取一些数据且每个数据取一个属性使得组成连续的一段单调递 ...
- Codeforces Round# 305 (Div 1)
[Codeforces 547A] #include <bits/stdc++.h> #define maxn 1000010 using namespace std; typedef l ...
- redis API使用说明
List相关: LPOP key : 删除并取得LIST头部一个元素 RPOP key : 删除并取得LIST尾部一个元素 BLPOP key [key ...] timeout : 删除并取得LIS ...
- Struts2 中result type属性说明
Struts2 中result type属性说明 首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-t ...
- javamail发送邮件的简单实例
今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题.为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用.呵呵 以下三段代码是我的全部代码,朋友们如果想用,直接 ...
- Leetcode | substr()
求子串当然最经典的就是KMP算法了.brute force算法在leetcode上貌似也有一些技巧. brute force: char* StrStr(const char *str, const ...
- [排错] PATH_MISSING
症状: 更换了磁带机部件,导致Robots选项卡中的TLD(2) Robotic Path显示为PATH_MISSING. 解决方法: 概括起来就是: 删除TLD(2),重新创建Robot记录,然后重 ...