列表
概念及定义:可以存放不同的数据类型的集合,这一点是与C语言数组不同之处,C语言数组只能存放同种类型的数据。
list = ["abc",'123',False,{"abc","123"},1,2,3,["abc","123"]],可以存放 字符串,布尔,列表,集合,列表...
生成方式:
一、列表生成式
nums = range(strat,stop-1,step)
eg:生成1-99的奇数列表 以及生成99-1的奇数列表
# #0-99的list
nums = range(100)
print (range(1,100,2))
print(range(99,1,-2))
二、列表推导式
其思想是映射,就像数学里的函数,y= x^2之类的。还可以在原来列表基础上进行筛选过滤。
resultList = [表达式 for 变量 in 列表 if条件]
nums = [1,2,3,4,5]
resultList = [num **2 for num in nums if num % 2 != 0]
print resultList
用循环写九九乘法表
for num in range(1,10):
for n in range(1,num+1):
print("%d * %d = %d"%(n,num,n*num)),
print("")
用列表和循环写:
print('\n'.join(['\t'.join(['%d * %d = %d'%(num,n,num*n) for n in range(1,num + 1)]) for num in range(1,10)]))
用一行代码实现两个字符串的笛卡尔积组合
print( [x + y for x in "lxm" for y in "dl"])
这两个代码的运行结果
list相关操作:
增加
list.append(object)
append 在列表最后追加一个新元素 返回值是None,会直接修改列表
list.insert(self,index,object) 会直接修改列表,插入的值在索引值前面,其余的值往后移
list.extend(iterable) 作用:往列表里直接扩展可迭代序列,返回值为None,会直接修改原列表。它与append的区别,可以理解我两个列表的拼接。把元素都分解开,往原list里添加。
删除
del 指定元素 可以删除某个元素,删除整个列表
list.pop(index = -1) 返回值是删除的元素,会直接修改原列表。注意越界!
list.remove(object) 返回值是None,会直接修改原列表,如果元素不存在,会直接报错,如果有多个元素,只删除最左边的一个。
修改
list[index] = object 注意越界。这个与字符串也不同,字符串虽然也可以用索引找到某个字符,但不可以修改。
查询
items[index] 获取单个元素, 注意索引正负。
index() 获取元素索引
idx = index(object,start,end) 这个可以与修改一起使用,如果列表里有许多一个的数字,它只找到最左边的。
list.count(object) 获取指定元素的个数
list.items[start:end:step]获取多个元素,也叫切片
遍历
1、根据元素遍历
for item in list:
print(item)
2、根据索引进行遍历
for index in range(len(list))
print(index,list[index])
首先要有一个索引列表 indexs = range(len(list)),然后在遍历整个索引列表,每个索引对应一个指定的元素。
3、通过枚举函数,生成一个新的枚举对象,主要用于将一个可遍历的数据同时列出数据下标和数据。
enumerate()
首先要根据列表创建一个枚举对象enumerate(list)再遍历整个枚举对象(枚举对象可以直接被遍历)
for idx,val in enumerate(list,1):索引值一般从0开始,如果想要从1开始,就跟写的一样
4、用迭代器
怎样判定一个对象是否是可迭代对象 方法:
import collections
instance(obj,collections.Iterable)
迭代器:是可以遍历位置的对象,从第一个元素开始,往后通过next()函数,进行遍历,只能往后,不能往前。判定依据:作用于next()函数。它本身也是一个可迭代对象。这说明可迭代器与可迭代对象是不一样的。判断方法:
import collections
instance(obj,collections.Iterator)
可以用iter()函数将一个可迭代对象转换为迭代器
那既然迭代器也是可迭代对象,也可以作用于for in 那为什么要用它了?理由1:仅仅在迭代到某个元素的时候才处理元素,2,提供了一个统一的访问集合的接口。
步骤:首先创建一个迭代器对象
l = [1,2,3,4]
it = iter(l)
for v in it:
print(v)
迭代器一般不能多次迭代,如果用next()的话,再取出完毕后会再继续取 报错
用 for in会自动处理迭代完毕的错误