列表:定义 和特性

列表定义和创建:

  定义:[,]内以逗号分隔,按照索引,存放各种数据类型,一般没有限制,每个位置代表一个元素

  

range_create = list(range(0, 10))print(range_create)>>:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

str = 'yanxiatingyu'str_create = list(str)print(str_create)>>:['y', 'a', 'n', 'x', 'i', 'a', 't', 'i', 'n', 'g', 'y', 'u']

iter_create=[lis for lis in range(0,10)]print(iter_create)>>:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

特性:1.可以存放多个值2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序3.可修改指定索引位置对应的值,可变

#取值#索引 取值 基本上和string 操作差不多name='yanxiatingyu'name_list=list(name)print(name_list[0])>>:y
print(name_list[:])#不设限
print(name_list[::2])#正向步长
print(name_list[::-1])#取反

#追加name_list.append('new_element')

#在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加#插入name_list.insert()
name_list=('yan xia ting yu').split()print(name_list)name_list.insert(3,'hello insert')print(name_list)['yan', 'xia', 'ting', 'yu']['yan', 'xia', 'ting', 'hello insert', 'yu']


#删除 方式一  name_list.remove('new_element')

方式二name_list.append('new_element')del name_list[name_list.index('new_element')]print(name_list)

list.pop() 删最后一个元素

list.pop(n)指定下标,删除指定的元素,如果删除一个不存在的元素会报错

list.remove(xx) 删除list 里面的一个元素,有多个相同的元素,删除第一个

print(list.pop()) 有返回值

print(list.remove()) 无返回值

del  list[n] 删除指定下标对应的元素

del list 删除整个列表, list删除后无法访问

list.reverse()将列表反转

list.sort()排序,默认升序

list.sort(reverse=True) 降序排列

注:list 中有字符串,数字时不能排序,排序针对同类型

六,列表操作的函数

1、len(list):列表元素个数 
2、max(list):返回列表元素最大值 
3、min(list):返回列表元素最小值 
4、list(seq):将元组转换为列表

5、enumerate 用法(打印元素对应的下标)

同时取下标,元素



长度print(len(name_list))

【in 与 not in 操作符】包含 与 不包含关系

if 'new_element' in name_list:  print('存在此元素')if 'new_element' not in name_list:  print('不存在此元素')

【count 统计字符在list出现的次数】print(name_list.count('统计'))

【查找值,并且返回索引】name_list.index('a')#假如存在则返回元素第一次出现处的索引,不存在报错:ValueError:element is not in list
name_list.index('a',0,5)#返回element 在指定切片内第一次出现的位置

三,查看列表中的值

print(list)    遍历列表

等价于    for i in list:

print i

print(list[n])  使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符

print(list.count(xx)) 查看某个元素在这个列表里的个数,如果改元素不存在,那么返回0

print(list.index(xx))找到这个元素的小标,如果有多个,返回第一个,如果找一个不存在的元素会报错



【list 与 可迭代循环】for i,item in enumerate(name_list):#可迭代循环  print('name_list[%s]:%s'%(i,item))

#列表与字符串name='yan xia ting yu'name_list=name.split(' ')print(name_list)>>:['yan','xia','ting','yu']

print(' '.join(name_list))>>:yan xia ting yu

#列表 高级操作 以及 效率问题name_list = ('yan xia ting yu').split(' ')list_zhang = 'zhang huan huan'.split(' ')name_list += list_zhang#说明:用 + 号连接符此效率较低,# 先创建新列表,并将所有对象复制过去,# 而用extend将元素附加到现有列表# (尤其是在构建一个大列表时)就会好很多name_list.extend(list_zhang)print(name_list)

#排序#用sort方法可以实现就地排序(无需创建新对象,字符串按首字母进行排序)name='yanxiatingyu'name_list=list(name)print(name_list)name_list.sort()print(name_list)#['yan', 'xia', 'ting', 'yu', 'zhang', 'huan', 'huan', 'zhang', 'huan', 'huan']#['y', 'a', 'n', 'x', 'i', 'a', 't', 'i', 'n', 'g', 'y', 'u']#['a', 'a', 'g', 'i', 'i', 'n', 'n', 't', 'u', 'x', 'y', 'y']#sort有几个很好用的选项,一个是次要排序键,# 即一个能够产生可用于排序的值的函数。如可以通过长度对一组字符串进行排序#使用sort 排序 不会返回新列表

name_list=list('yanxiatingyu')name_list.sort(key=len)#print(name_list)>>:['y', 'a', 'n', 'x', 'i', 'a', 't', 'i', 'n', 'g', 'y', 'u']#是否进行降序排列:# 下面例子是根据首字母进行排序操作
name_list.sort(key= lambda  x:x[0],reverse=True)print(name_list))

>>:['y', 'y', 'x', 'u', 't', 'n', 'n', 'i', 'i', 'g', 'a', 'a']

二分搜索及维护有序列表(bisect)

内置的bisect模块实现了二分查找以及对有序列表的插入操作。bisect.bisect可以找出新元素应该被插入到哪个位置以保持元列表的有序性,bisect.insort则将新元素插入到那个正确的位置上。

注意:bisect模块的函数不会判断原列表是否有序,因为这样做开销太大;因此将他们用作无序列表时虽然不会出错,但可能会导致不正确的结果。基于此,建议在使用bisect模块的函数前,先对原列表执行排序的操作。

#https://blog.csdn.net/shaxiaozilove/article/details/79685168     #原文:管理list操作#https://www.cnblogs.com/yanxiatingyu/p/9277019.html          #关于bisect 模块#https://www.cnblogs.com/skydesign/archive/2011/09/02/2163592.html  #关于bisect模块

切片(索引运算符[]及start:stop)

可以对序列类型(数组、列表、元组等)进行切片操作,start索引处元素被包括在切片的结果中,stop索引处的元素未被包括在结果中,元素数量为 stop-start。start或stop都是可以省略的,此时他们分别默认为序列的起始处和结尾处。

切片操作:可以参考我的博文,striing 这块

列表内置的序列函数 enumerate

enumerate函数可以逐个返回序列的(key,value)组合,你可以根据这个得到自己想要的容器类型如下:
name = 'yanxiatingyu'name_list = list(name)name_dict= dict((key + 1, value) for key, value in enumerate(name_list))print(type(name_dict), name_dict)>>:<class 'dict'> {1: 'y', 2: 'a', 3: 'n', 4: 'x', 5: 'i', 6: 'a', 7: 't', 8: 'i', 9: 'n', 10: 'g', 11: 'y', 12: 'u'}
 

六,列表操作的函数

1、len(list):列表元素个数 
2、max(list):返回列表元素最大值 
3、min(list):返回列表元素最小值 
4、list(seq):将元组转换为列表

5、enumerate 用法(打印元素对应的下标)

同时取下标,元素



#sorted()排序是返回一个新的list#sort()是就地排序print(sorted(name_list))['a', 'a', 'g', 'i', 'i', 'n', 'n', 't', 'u', 'x', 'y', 'y']

#sorted 和set 配合使用,得到一个有序,元素不重复的    list
print(sorted('yan xia ting yu'))print(sorted(set('yan xia ting yu')))# [' ', ' ', ' ', 'a', 'a', 'g', 'i', 'i', 'n', 'n', 't', 'u', 'x', 'y', 'y']# [' ', 'a', 'g', 'i', 'n', 't', 'u', 'x', 'y']print(set('yan xia ting yu'))print(set(sorted('yan xia ting yu'))) #字典是无序的,所以下列内容也是无序的,不信可以试一试多运行几遍# {'i', 'a', 'x', 'g', ' ', 'n', 'y', 't', 'u'}# {'i', 'a', 'g', 'x', ' ', 'n', 'u', 't', 'y'}
 

zip用于将多个序列(列表、元组等)中的元素“配对”,从而产生一个新的元组列表;zip可以接受任意数量的序列,最终得到的元组数量由最短的序列决定;zip最常见的用法是同时迭代多个序列,还可以结合enumerate一起使用,如下:

name = 'yan xia ting yu'name_list =name.split()print(name_list)girl='girl1 girl2 girl3 girl4'girl_list=girl.split()print(girl_list)iter_zip=zip(girl_list,name_list)print(type(iter_zip))print('iter_zip')for v,k in iter_zip:    print(v,k)

print('enumerate(iter_zip)')for i,v in enumerate(iter_zip):#这里无法输出?    print('%s %s '%(i+1,v))

print('enumerate(zip(girl_list,name_list))')for i,(v,k) in enumerate(zip(girl_list,name_list)):    print('%s %s %s'%(i+1,v,k))

# ['yan', 'xia', 'ting', 'yu']# ['girl1', 'girl2', 'girl3', 'girl4']# <class 'zip'># iter_zip# girl1 yan# girl2 xia# girl3 ting# girl4 yu# enumerate(iter_zip)# enumerate(zip(girl_list,name_list))# 1 girl1 yan# 2 girl2 xia# 3 girl3 ting# 4 girl4 yu

 对于“已压缩的”(zipped)序列,zip还有一个很巧妙的用法,即对该序列进行解压(unzip,用*表示)。其实就是             【将一组行转换为一组列】如下:
teacher=[('egon',18),('lqz',16),('wxx',20)]name,age=zip(*teacher)print(type(name),name)# <class 'tuple'> ('egon', 'lqz', 'wxx')print(type(age),age)# <class 'tuple'> (18, 16, 20)

teacher=[('egon',18),('lqz',16)]name1,name2=zip(teacher)print(type(name1),name1)# <class 'tuple'> (('egon', 18),)print(type(name2),name2)# <class 'tuple'> (('lqz', 16),)name_list=('yan xia ting yu').split()print(name_list)['yan', 'xia', 'ting', 'yu']

【数据解压】x,y,z,_=name_listprint(_)x,y,*_=name_listprint(x)print(*_)
#yu#yan#ting yu

#逆向排序 reversed()    函数是返回序列seq的反向访问的迭代子。参数可以是列表,元组,字符串,不改变原对象。

print([x for x in reversed([1,2,5,4,-1])])
>>:[-1, 4, 5, 2, 1]

head first Python 总结:
1,列表是一个有序的对象集合2,一个对象在另外一个对象中吗?用 in 来检查

3,从列表中删除对象 remove
remove:取一个对象值作为唯一参数。remove方法会从列表中删除指定数据值的第一次出现。

如果在列表中找到了这个数据值,就会从列表中删除包含这个值的对象(同时列表的大小减一)。如果在列表中没有找到这个数据值,会报错。

4,从列表中弹出对象 pop
pop:取一个可选的索引值(indexof)作为参数。pop方法根据对象的索引值从现有列表删除和返回一个对象。

如果调用pop时没有指定索引值,将删除和返回列表中的最后一个对象。如果指定了一个索引值,则会删除和返回那个位置上的对象。

如果列表为空或者调用pop时指定了一个不存在的索引值,会报错。

5,用对象扩展列表 extend 
extend:取一个对象列表作为唯一参数。extend方法接收第二个列表,将其中的各个对象增加到现有列表。如果要将两个列表合并为一个列表,这个方法就非常有用。

6,在列表中插入一个对象 insert/append
insert:取一个索引值和一个对象作为参数。insert 方法将一个对象插入到现有列表中指定索引值的前面。

这样就可以将对象插入到现有列表的开头,或者插入到列表中的任何位置。要把对象插入到列表末尾,用append 。用法 num.insert(2,"abc")

7,如何复制一个数据结构?不要使用赋值操作符复制列表;应当使用copy方法。
赋值操作都指向同一个数据,如果修改一个列表,另一个也会改变;如果想让另一个变量引用一个现有列表,可以使用赋值操作(=)
copy:list2 = list1.copy() ;如果想建立现有列表中对象的副本,用他们初始化一个新列表,就一定要使用copy 方法

8,列表切片的使用【start:stop:step】不包含stop 索引值
step 为正数时,从右至左;step 为负数时,从左至右

												

python 基础数据类型 之 列表的更多相关文章

  1. Python基础数据类型之列表和元组

    一.列表   list 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li ...

  2. python基础数据类型--list列表

    列表: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘alex ...

  3. Python - 基础数据类型 list 列表

    什么是列表 列表是一个有序的序列 列表中所有的元素放在 [ ] 中间,并用逗号分开 一个 列表 可以包含不同类型的元素,但通常使用时各个元素类型相同 特征 占用空间小,浪费内存空间少 声明列表变量 列 ...

  4. python基础数据类型之列表,元组操作

    一.列表的索引和切片1.列表的索引列表和字符串一样样拥有索引 lst = ["a","b","c"] print(lst[0]) # 获取第 ...

  5. Python基础数据类型-列表(list)和元组(tuple)和集合(set)

    Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...

  6. Python之路-基础数据类型之列表 元组

    列表的定义 列表是Python基础数据类型之一,它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型: lst = [1,2,'你好','num'] 列表的索引和切片 与字符串类似, ...

  7. python基础数据类型--列表(list)

    python基础数据类型--列表(list) 列表是我们在后面经常用到的数据类型之一,通过列表可以对数据类型进行增.删.改.查等操作 一列表的增.删.改.查 1增: 1.1增加到最后   append ...

  8. Python基础数据类型-字符串(string)

    Python基础数据类型-字符串(string) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版 ...

  9. python基础数据类型考试题

    Python基础数据类型考试题 考试时间:两个半小时                      满分100分(80分以上包含80分及格) 一,基础题. 1,简述变量命名规范(3分) 2,字节和位的关系 ...

随机推荐

  1. 讲一讲Servlet和JSP的关系

    Test.jsp在运行时首先被解析成一个java类Test_jsp.java,该类继承于org.apache.jasper.runtime.HtppJspBase类,而Http又是继承HttpServ ...

  2. 11.mysql-权限.md

    目录 -- ***********五.mysql权限问题**************** -- mysql数据库权限问题:root :拥有所有权限(可以干任何事情) -- 权限账户,只拥有部分权限(C ...

  3. thymeleaf 字符串的拼接

  4. 阿里云栖大会 所有ppt

    https://github.com/Alimei/hangzhouYunQi2017ppt

  5. js 浏览器页面切换事件

    document.addEventListener('visibilitychange', function() { console.log(isHidden() + "-" + ...

  6. MySQL driver for Node

    [MySQL driver for Node] 1.安装 2.一个示例 From this example, you can learn the following: Every method you ...

  7. sql语句中的不等于 <>

    建议最好使用 <> 表示不等于 原因:!=在sql2000不表示不等于

  8. MVC001之mvcpager简单分页

    描述:用mvcpager实现简单分页功能 参考网址: http://www.cnblogs.com/iamlilinfeng/archive/2013/03/11/2951460.html http: ...

  9. Android笔记:intent

    一.显式intent如下:(1)在intent构造函数传入两个activity文件名Intent intent = new Intent(FirstActivity.this, SecondActiv ...

  10. 将秒数转为HH:MM:SS格式的时间

    /**  * 将秒数转为HH:MM:SS格式的时间  * @param $seconds  * @return string  */ public static function GetHHMMSSB ...