您的位置:首页 > 编程语言 > Python开发

python基础--list操作

2017-09-29 16:50 381 查看

有序列表list

一、列表的特性

1、有序的集合

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

3、支持嵌套

4、可变的类型

列表支持的方法

>>> dir(list)

>>> 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、切片:正向索引、反向索引、默认索引

list[x:y]表示从x开始到y之前的切片

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]

>>> li  

['a', 'b', 'mpilgrim', 'z', 'example']  

>>> li[-1]  

'example'  

>>> li[-3]  

'mpilgrim'  

>>> li  

['a', 'b', 'mpilgrim', 'z', 'example']  

>>> li[1:3]   

['b', 'mpilgrim']  

>>> li[1:-1]  

['b', 'mpilgrim', 'z']  

>>> li[0:3]   

['a', 'b', 'mpilgrim']
 

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的偶数

1

2

>>>[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]

1

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

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

1

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指向的是不同的对象地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: