1

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

(更新)

一个例子:

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

4 回答 4

3

我可以给你的一种方法:

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-loop的值i变成9。并且在打印语句之前,您从列表中删除了一些元素,l = [x for x in l if x > 0]因此列表的大小l尖叫到小于 < 的值i。并且print(i, l[i])您正试图在i错误的位置建立索引!

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

print(i, l[len(l)-1])
于 2013-01-12T19:01:19.337 回答
1
my_list = [i for i in my_list if i>0]
于 2013-01-12T19:01:06.973 回答
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
于 2013-01-12T19:18:00.817 回答
0

有两种方法可以轻松地从可迭代对象中过滤元素:

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

或者:

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

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

于 2013-01-12T19:05:35.037 回答