http://www.jb51.net/article/115953.htm
本文实例讲述了Python实现删除列表中满足一定条件的元素。分享给大家供大家参考,具体如下:
从列表中删除满足一定条件的元素。
如:删除一个列表中长度为0的元素,或者删除列表中同时是2和3的倍数的元素。
做过高级语言编程的人想当然的会认为“这很简单”,可以如下面的方式来实现:
1
2
3
|
for
i
in
listObj:
if
(...):
listObj.remove(i)
|
看下一个小例子和结果:
1
2
3
4
5
|
a
=
[
1
,
2
,
3
,
12
,
12
,
5
,
6
,
8
,
9
]
for
i
in
a:
if
i
%
2
=
=
0
and
i
%
3
=
=
0
:
a.remove(i)
print
(a)
|
运行结果:
1
2
|
E:\Program\Python>d.py
[
1
,
2
,
3
,
12
,
5
,
8
,
9
]
|
看到了吗?12竟然没有被删除!!!(这是Python列表操作的一个非常容易出错的地方)
要实现预期的目标,其实还是有不少变通方法的,比如:
1
2
3
4
5
6
7
|
a
=
[
1
,
2
,
3
,
12
,
12
,
5
,
6
,
8
,
9
]
b
=
a[:]
for
i
in
a:
if
i
%
2
=
=
0
and
i
%
3
=
=
0
:
b.remove(i)
a
=
b
print
(a)
|
运行结果:
1
2
|
E:\Program\Python>d.py
[
1
,
2
,
3
,
5
,
8
,
9
]
|
看看,现在达到预期的目标了吧。从上面的代码不难发现,我们构建了列表b,复制了列表a中的所有元素,通过遍历a来删除b中的元素,最后把a指向b。
我还发现了另一种方法,自认为挺不错的——列表推导式
1
2
3
4
5
6
|
a
=
[
'what'
, '
', '
', '
some
', '
', '
time']
a
=
[i
for
i
in
a
if
len
(i) >
0
]
print
(a)
b
=
[
1
,
2
,
3
,
12
,
12
,
5
,
6
,
8
,
9
]
b
=
[i
for
i
in
b
if
not
(i
%
3
=
=
0
and
i
%
2
=
=
0
)]
print
(b)
|
运行结果:
1
2
3
|
E:\Program\Python>d.py
[
'what'
,
'some'
,
'time'
]
[
1
,
2
,
3
,
5
,
8
,
9
]
|