python 列表特点及常用操作

一、列表的特性

1、有序的集合

2、通过偏移来索引,从而读取数据

3、支持嵌套

4、可变的类型


列表支持的方法

1
2
>>>  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' ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> 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、切片:正向索引、反向索引、默认索引

1
2
3
4
5
6
7
8
9
10
11
12
=  [ 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: 插入任意对象到列表中,可以控制插入位置。


 

1
2
3
4
5
>>> a  =  [ 1 , 2 , 3 ]
>>> b = [ 4 , 5 , 6 ]
>>> c = a + b
>>>  print  #产生一个新的列表
[ 1 2 3 4 5 6 ]
1
2
3
4
5
6
7
>>>  id (a)
46944392835016
>>> a.extend(b)   #原地修改列表
>>>  print  a
[ 1 2 3 4 5 6 ]
>>>  id (a)
46944392835016
1
2
3
4
5
6
7
>>> 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、修改,修改列表本身只需要直接赋值操作就行。

1
2
3
4
>>> A  =  [ 1 , 2 , 3 ]
>>> A[ 0 ] = 'python'
>>>  print  A
[ 'python' 2 3 ]

 


4、删除操作:

Del :我们通过索引删除指定位置的元素。

Remove:移除列表中指定值的第一个匹配值。如果没找到的话,会抛异常。

Pop:返回最后一个元素,并从list中删除它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> 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.

1
2
3
4
5
>>> 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的列表

1
2
3
4
>>> [x  for  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的所有奇数列表。

1
2
3
4
>>>  range ( 1 , 11 , 2 )
[ 1 3 5 7 9 ]
>>> [x  for  in  range ( 1 , 11 if  %  2  = =  1 ]
[ 1 3 5 7 9 ]



6.3 取出1-100的所有值的平方。

1
[x * for  in  range ( 100 )]

6.4 生成字符串 

1
[ 'the %s'  %  d   for  in  xrange ( 10 )]

6.5 生成元组 

1
2
>>> [(x,y)  for  in  range ( 2 for  in  range ( 2 )]
[( 0 0 ), ( 0 1 ), ( 1 0 ), ( 1 1 )]

6.6 生成字典  

1
2
>>>  dict ([(x,y)  for  in  range ( 3 for  in  range ( 2 )])  #后面的键会覆盖前面的键
{ 0 1 1 1 2 1 }


 


7、排序翻转:sort,reverse

1
2
3
4
5
6
>>> a =  [ 33 , 11 , 22 , 44 ]
>>> b = a.sort()  #直接修改原列表,返回的是一个None
>>>  print  b
None
>>>  print  a
[ 11 22 33 44 ]

list的reverse函数:反转一个list, 直接修改原列表,它的返回值为none

比如上面的列表a

1
2
3
4
5
=  a. reverse()
print  b   #输出的内容是None
>>> b = a.reverse()
>>> a   #直接看a列表变量能看到翻转的效果。
[ 44 33 22 11 ]


8、内置list方法,返回一个列表,参数是可迭代对象。里面输出的内容还是保持了传入的可迭代对象的元素和顺序。如果参数为空,则返回一个空的列表

1
2
3
4
5
6
7
=  "asd"
list (a)
>>> a = "asd"
>>>  list (a)
[ 'a' 's' 'd' ]
>>>  list (( 1 , 3 ))
[ 1 3 ]


9、xrange和range的具体区别。

9.1 xrange的用法:

xrange(开始,结束,步长)

xrange 它生成一个xrange对象。

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> 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,效率更高。


比如:

1
2
3
4
5
6
7
8
for  in  range ( 1000 ):   #[0-999]
     if  = =  10 :
         print  'sss'
         break
for  in  xrange ( 1000 ):   #[0-10] 
     if  = =  10 :
         print  'sss'
         break



10、列表的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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 =[]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> 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]

1
2
3
4
5
>>> 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的偶数

1
2
>>>[x  for  in  range ( 20 , 101 if  x % 2 = = 0 ]
>>>  range ( 20 , 101 , 2 )


五: 已知:元组 a = (1,2,3) 利用list方法,输出下面的结果:

(1,2,4)

1
2
3
4
5
6
>>> 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]

1
>>> [ "%s love python"   %   x   for  in  range ( 1 , 11 )]


2 输出结果:[(0,0),(0,2),(2,0),(2,2)]

1
2
>>> [(x,y)  for  in  range ( 0 , 3 , 2 for  in  range ( 0 , 3 , 2 )]
[( 0 0 ), ( 0 2 ), ( 2 0 ), ( 2 2 )]


七:

a = [1,2,3]

b = a[:]

del a

b的值是什么,为什么呢?

1
2
3
4
5
>>> a  =  [ 1 , 2 , 3 ]
>>> b = a[:]
>>>  del  a
>>> b
[ 1 2 3 ]

因为b和a指向的是不同的对象地址


文章转自:http://blog.51cto.com/395469372/1748120

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值