如何在remove()函数之后从列表推导中获得更新的列表



我想在循环的if else部分之后获得列表,但是如何在对其进行操作后获得列表呢?因为从列表中删除1.00后不返回更新的列表,我如何将其设置为一个变量,并得到?

注意:'nls'中的每个项目都是一个浮点数列表,没有删除函数,但我需要它删除,如果某些值存在

[round((sum(list(i).remove(1.00)) / len(list(i).remove(1.00))), 2)
if 1.0 in i else sum(i) / len(i)
for i in zip(nls[0], nls[1], nls[2])]

我的价值观:(1.0,214.97,214.97),(2.0,179.99,179.99),(1.0,169.99,169.99)

我想得到[214.97, 120.66, 169.99]

列表推导在一定程度上是有用的,但不能做所有事情。在某种程度上,它们可能不必要地使代码不可读。对于这个任务,我将坚持使用老式的for循环:

nls = [(1.0, 214.97, 214.97), (2.0, 179.99, 179.99), (1.0, 169.99, 169.99)]
result = []
for tup in nls:
lst = list(tup)
if 1.0 in lst:
lst.remove(1.0)
ave = round(sum(lst)/len(lst),2)
result.append(ave)
print(result)
#prints: [214.97, 120.66, 169.99]

如果我正确理解了你的问题,也许是这样的?

from itertools import zip_longest
from statistics import mean
nls = [
(1.0, 2.0, 1.0),
(214.97, 179.99, 169.99),
(214.97, 179.99, 169.99)
]
def filter_column(column):
def predicate(value):
from math import isclose
return value is not None and not isclose(value, 1.0)
return tuple(filter(predicate, column))
print(list(map(mean, map(filter_column, zip_longest(*nls, fillvalue=None)))))

输出:

[214.97, 120.66000000000001, 169.99]
>>> 

如果所有列都保证具有相同的长度(在过滤之前),则不需要EDIT -itertools.zip_longest,在这种情况下,谓词也可以更改。

代码中的错误,没有删除任何特定的值,而是删除0的值,因此只需除以len()-1即可获得所需的结果

最新更新