如何在循环中过滤Python 3中的数字列表&更改列表长度

时间:2013-01-12 18:55:45

标签: python list loops filter python-3.x

使用PYTHON 3.我想在LOOP中创建一个新列表(浮点数),而不更改列表的名称,这将删除所有的负数或零元素,最终改变其长度。谁是最快的方法呢?我失去了试图做最后几天......

(UPDATE)

示例:

import math

l= [0.]*10

for i in range(1,10):

l[i] = math.sin(i)

l = [x for  x in l if x > 0]

print(i, l[i])

仍然无法正常工作......

4 个答案:

答案 0 :(得分:2)

我可以给你的一种方式:

new_list = [x for x in yourlist if not x <= 0 ] 

我试过了:

>>> yourlist = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
>>> new_list = [x for x in yourlist if not x <= 0 ] 
>>> print new_list
[1, 3.9, 4]

编辑:

第二种方法:

L = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
out = []
for i in L[:]:
 if i > 0:
  out.append(i)

print out

<强> EDIT2:
当你评论我的回答时,可能你需要这个:
第三种方式:

L = [1, -2 , 0 , 3.9 , 4 , -5.8, -3.0 ]
for obj in L[:]:
 if obj <= 0:
  del L[L.index(obj)]

print L 

EDIT3 (更新)代码错误

在您的代码中:

import math
l= [0.]*10

for i in range(1,10):
 l[i] = math.sin(i)

l = [x for  x in l if x > 0]
print(i, l[i])  

您在此IndexError行获得了print(i, l[i])。因为for-loopi的值变为9。在print语句之前删除列表l = [x for x in l if x > 0]中的一些元素,因此列表l的大小尖叫到少于&lt;值i。并且在print(i, l[i])中,您试图在i位置错误索引!

你想要什么?如果要打印列表中的最后一个元素,请执行以下操作:

print(i, l[len(l)-1])

答案 1 :(得分:1)

my_list = [i for i in my_list if i>0]

答案 2 :(得分:0)

有两种方法可以轻松过滤迭代中的元素:

output = [i for i in input if i > 0]

或:

output = filter(lambda i: i > 0, input)

请注意,[filter(function, iterable)] [1]返回一个迭代器,如果需要列表对象,只需执行output = list(output)之类的操作。

答案 3 :(得分:0)

假设我们有一个列表l = [-2, -1.4, 0, 1, 2.2, 3]

第一种方法是简单地使用列表理解,并设置列表名称以引用创建的新列表。

l = [i for i in l if i > 0]

另一种方法是遍历列表的副本,并删除小于或等于0的元素:

for i in l[:]:
    if i <= 0:
        l.remove(i)

无论哪种方式,结果都是[1, 2.2, 3]


编辑到您的更新:

import math
l = []
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        l.append(i)

for v in l:
    print(v)

将所有带0或负罪的数字遗漏,导致:

0.841470984808
0.909297426826
0.14112000806
0.656986598719
0.989358246623
0.412118485242

EDIT2 如果您还需要原始号码,我会使用词典

import math
d = {}
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        d[i] = v

for k in d:
    print(k, d[k])

元组

import math
l = []
for i in range(1, 10):
    v = math.sin(i)
    if v > 0:
        l.append((i, v))

for t in l:
    print(t[0], t[1])

这将导致:

1 0.8414709848078965
2 0.9092974268256817
3 0.1411200080598672
7 0.6569865987187891
8 0.9893582466233818
9 0.4121184852417566