一、列表的特性
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
|
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: 插入任意对象到列表中,可以控制插入位置。
1
2
3
4
5
|
>>> a
=
[
1
,
2
,
3
]
>>> b
=
[
4
,
5
,
6
]
>>> c
=
a
+
b
>>>
print
c
#产生一个新的列表
[
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
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的所有奇数列表。
1
2
3
4
|
>>>
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的所有值的平方。
1
|
[x
*
x
for
x
in
range
(
100
)]
|
6.4 生成字符串
1
|
[
'the %s'
%
d
for
d
in
xrange
(
10
)]
|
6.5 生成元组
1
2
|
>>> [(x,y)
for
x
in
range
(
2
)
for
y
in
range
(
2
)]
[(
0
,
0
), (
0
,
1
), (
1
,
0
), (
1
,
1
)]
|
6.6 生成字典
1
2
|
>>>
dict
([(x,y)
for
x
in
range
(
3
)
for
y
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
|
b
=
a. reverse()
print
b
#输出的内容是None
>>> b
=
a.reverse()
>>> a
#直接看a列表变量能看到翻转的效果。
[
44
,
33
,
22
,
11
]
|
8、内置list方法,返回一个列表,参数是可迭代对象。里面输出的内容还是保持了传入的可迭代对象的元素和顺序。如果参数为空,则返回一个空的列表
1
2
3
4
5
6
7
|
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对象。
比如:
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
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、列表的引用
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
x
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
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的值是什么,为什么呢?
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