使用 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])
仍然无法正常工作...
使用 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])
仍然无法正常工作...
我可以给你的一种方法:
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])
my_list = [i for i in my_list if i>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
有两种方法可以轻松地从可迭代对象中过滤元素:
output = [i for i in input if i > 0]
或者:
output = filter(lambda i: i > 0, input)
请注意, [ filter(function, iterable)
][1] 返回一个迭代器,所以output = list(output)
如果您需要一个列表对象,只需执行类似的操作。