一、列表的特性
1、有序的集合
2、通过偏移来索引,从而读取数据
3、支持嵌套
4、可变的类型
列表支持的方法
>>> dir(list) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> a= [1,2,3] >>> a[-1] 3 >>> b=[[1,2,3],[3,4,5]] #列表可以嵌套 >>> b[1] [3, 4, 5] >>> b[1][1] 4 >>> b[1]=10 #原地修改列表 >>> b [[1, 2, 3], 10] >>> id(b) 46944392836376 >>> b[0]=5 >>> b [5, 10] >>> id(b) 46944392836376
二、列表的常用操作
1、切片:正向索引、反向索引、默认索引
a = [1,2,3,4,5,6,7] >>> a = [1,2,3,4,5,6,7] >>> a [1, 2, 3, 4, 5, 6, 7] >>> a[0:4:1] [1, 2, 3, 4] >>> a[-1:-4:-1] [7, 6, 5] >>> a[1:] [2, 3, 4, 5, 6, 7] >>> a[1::2] [2, 4, 6]
2、添加操作:
+: 生成一个新的列表
Extend 接受参数并将该参数的每个元素都添加到原有的列表中,原地修改列表而不是新建列表
Append :添加任意对象到列表的末端
Insert: 插入任意对象到列表中,可以控制插入位置。
>>> a = [1,2,3] >>> b=[4,5,6] >>> c=a+b >>> print c #产生一个新的列表 [1, 2, 3, 4, 5, 6]
>>> id(a) 46944392835016 >>> a.extend(b) #原地修改列表 >>> print a [1, 2, 3, 4, 5, 6] >>> id(a) 46944392835016
>>> a=[1,2,3] >>> a.append(4) #添加任意对象到列表的末段 >>> print a [1, 2, 3, 4] >>> a.insert(1,'ab') >>> print a [1, 'ab', 2, 3, 4]
3、修改,修改列表本身只需要直接赋值操作就行。
>>> A = [1,2,3] >>> A[0]='python' >>> print A ['python', 2, 3]
4、删除操作:
Del :我们通过索引删除指定位置的元素。
Remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常。
Pop:返回最后一个元素,并从list中删除它。
>>> a ['python', 'ab', 2, 3, 4] >>> >>> del a[0] >>> a ['ab', 2, 3, 4] >>> a.remove(2) #删除的是给定的value >>> a ['ab', 3, 4] >>> a.remove(2) #如果没找到的话,会抛异常。 Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: list.remove(x): x not in list >>> a ['ab', 3, 4] >>> a.pop() #默认是删除最后一个元素,也可以跟一个具体的index 4 >>> a ['ab', 3]
5、成员关系:
in 、not in我们可以判断一个元素是否在列表里。
返回一个bool类型,元素在列表里返回true,否则返回fasle.
>>> a = [1,2,3] >>> 2 in a True >>> 5 not in a True
6、列表推导式:
[expr for iter_var in iterable]
6.1 、首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
比如我们要生成一个包含1到10的列表
>>> [x for x in range(1,11)] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> range(1,11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[expr for iter_var in iterable if cond_expr]
6.2、加入了判断语句,只有满足条件的内容才把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表。
要生成包含1到10的所有奇数列表。
>>> range(1,11,2) [1, 3, 5, 7, 9] >>> [x for x in range(1,11) if x % 2 == 1] [1, 3, 5, 7, 9]
6.3 取出1-100的所有值的平方。
[x*x for x in range(100)]
6.4 生成字符串
['the %s' % d for d in xrange(10)]
6.5 生成元组
>>> [(x,y) for x in range(2) for y in range(2)] [(0, 0), (0, 1), (1, 0), (1, 1)]
6.6 生成字典
>>> dict([(x,y) for x in range(3) for y in range(2)]) #后面的键会覆盖前面的键 {0: 1, 1: 1, 2: 1}
7、排序翻转:sort,reverse
>>> a= [33,11,22,44] >>> b=a.sort() #直接修改原列表,返回的是一个None >>> print b None >>> print a [11, 22, 33, 44]
list的reverse函数:反转一个list, 直接修改原列表,它的返回值为none
比如上面的列表a
b = a. reverse() print b #输出的内容是None >>> b=a.reverse() >>> a #直接看a列表变量能看到翻转的效果。 [44, 33, 22, 11]
8、内置list方法,返回一个列表,参数是可迭代对象。里面输出的内容还是保持了传入的可迭代对象的元素和顺序。如果参数为空,则返回一个空的列表
a = "asd" list(a) >>> a="asd" >>> list(a) ['a', 's', 'd'] >>> list((1,3)) [1, 3]
9、xrange和range的具体区别。
9.1 xrange的用法:
xrange(开始,结束,步长)
xrange 它生成一个xrange对象。
比如:
>>> a = xrange(1,10) >>> print type(a) <type 'xrange'> >>> print a[0] 1 >>> x = xrange(1,10) #返回的是一个生成器 >>> x xrange(1, 10) >>> b =range(1,10) #返回的是一个列表 >>> type(b) <type 'list'> >>> b [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x[0] 1 >>> b[0] 1
range: 直接生成一个列表对象。
xrange: 它是生成一个xrange对象.
xrange的用法:
1、当我们需要操作一个非常大的数据,而且内存比较吃紧的时候,我们可以用xrange来操作省内存。xrange的数据是取的时候才生成,而range是一次性生成好
2、xrange一般用在循环里面,比如我们只需要操作部分数据的话,而不是返回全部元素来完成操作,推荐用xrange,效率更高。
比如:
for m in range(1000): #[0-999] if m == 10: print 'sss' break for m in xrange(1000): #[0-10] if m == 10: print 'sss' break
10、列表的引用
>>> a = ['i','am','lilei'] >>> b=a >>> id(a) 46944392840544 >>> id(b) 46944392840544 >>> a[2]="hello" >>> print b[2] hello >>> print b ['i', 'am', 'hello'] >>> del b >>> a #删除了b的引用,a的引用还是在 ['i', 'am', 'hello']
小技巧之再议删除
1、a = []
2、del a 删除列表对象的引用
3、del a[:] 清空列表对象里的元素,等价于a =[]
>>> a = ['i','am','lilei'] >>> b=a >>> a=[] >>> b ['i', 'am', 'lilei'] >>> del a[:] >>> a [] >>> b ['i', 'am', 'lilei'] >>> a=b >>> del a >>> b ['i', 'am', 'lilei']
练习:
1、下面列表:
a = [1,2,3,4,5,333,11,44]
输出下面的结果:
[4,5,333]
>>> a[3:6] # 第一个参数是闭区间、第二个参数是开区间
[4, 5, 333]
>>> a[-5:-2]
[4, 5, 333]
2、有下面2个列表
a = [1,2,3]
b = [4,5,6]
用2个方法输出下面结果:
[1,2,3,4,5,6]
>>> a+b [1, 2, 3, 4, 5, 6] >>> a.extend(b) #将b的内容打散插入到a中 >>> a [1, 2, 3, 4, 5, 6]
>>> a = [1,2,3]
>>> a.append(b) #将b作为一个整体插入
>>> a
[1, 2, 3, [4, 5, 6]]
>>> a.insert(3,b) #将b作为一个整体插入
[1, 2, 3, [4, 5, 6]]
三 有下面2个列表:
a = [1,99,33,44,55,22]
b= [11,33,54]
输出结果:
1:[1,2,99,33,44,55,22,(11,33,54)]
2: [1,2,99,33,101,44,55,22]
四:用列表推导式生成100内的大于20的偶数
>>>[x for x in range(20,101) if x%2==0] >>> range(20,101,2)
五: 已知:元组 a = (1,2,3) 利用list方法,输出下面的结果:
(1,2,4)
>>> a = (1,2,3) >>> a=list(a) >>> a[2]=4 >>> a=tuple(a) >>> a (1, 2, 4)
六: 利用列表推导完成下面习题:
1 输出结果:[1 love python,2 love python,3 love python,.... 10 love python]
>>> ["%s love python" % x for x in range(1,11)]
2 输出结果:[(0,0),(0,2),(2,0),(2,2)]
>>> [(x,y) for x in range(0,3,2) for y in range(0,3,2)] [(0, 0), (0, 2), (2, 0), (2, 2)]
七:
a = [1,2,3]
b = a[:]
del a
b的值是什么,为什么呢?
>>> a = [1,2,3] >>> b=a[:] >>> del a >>> b [1, 2, 3]
因为b和a指向的是不同的对象地址
本文出自 “小鱼的博客” 博客,谢绝转载!