首页 > 解决方案 > 如何在Python列表中替换列表中的项目

问题描述

现在我只想用表中的 x 替换最小值、最大值....而且我不知道如何...

for i in table[1:]:
    mn = min(i) if min(i) < mn else mn 
    mx = max(i) if max(i) > mx else mx
    x = (mn+mx)/2

标签: pythonlistfor-loopnested-lists

解决方案


以下应该有效:

def remove_outliers(table):
    mx = max(map(max, table))
    mn = min(map(min, table))
    avg = (mx + mn) / 2

    for row in table:
        row[:] = [avg if x in (mx, mn) else x for x in row]
    # OR
    for row in table:
        for i, x in enumerate(row):
            if x in (mx, mn):
                row[i] = avg

max(map(max, table)):max函数应用于 中的每一行table,并取max所有这些“最大值”中的 。

row[:] = ...:切片分配。这是row对象的突变。只需row = ...重新绑定循环变量而不影响仍由table.

[avg if x in (mx, mn) else x for x in row]:一般条件列表理解。相当不言自明。


推荐阅读