修改条件上的列表元素

时间:2016-09-02 08:42:41

标签: python list

我是Python的新手,但有C / C ++背景。 我试图修改满足条件的2D列表(列表列表)元素。 我能想出的就是以下解决方案:

#parent0:hover #child0

我确信有一个更好的解决方案,它实际上适合Python,但不能想到任何其他实际工作。

编辑:实际上,列表tsdata是一个函数参数,我试图修改它,所以你的一些答案不起作用。我编辑了代码,所以这很清楚。

3 个答案:

答案 0 :(得分:2)

如果要处理大数组,可能需要使用numpy。除了更高效,我认为代码更容易阅读:

from numpy import random
tsdata = random.random((5, 5))
tsdata[tsdata < min_value] = 0
tsdata[tsdata > max_value] = 0

答案 1 :(得分:0)

欢迎来到简约和紧凑的陈述世界。

tsdata_mod = [[0 if (x < min_value or x > max_value) else x for x in y] for y in tsdata]

或在功能模式下:

def check(my_list):
    my_list_mod = [[0 if (x < min_value or x > max_value) else x for x in y] for y in tsdata]
    return my_list_mod

tsdata_mod = check(tsdata)

以上是我认为非常&#34; pythonic&#34;这个任务的方式。

此外,当您循环浏览列表等容器时,您也不会这样做:

for i in range(len(tsdata)):
    for j in range(len(tsdata[i])):
        # do something with "tsdata[i]","tsdata[i][j]"

而是:

for sublist in tsdata:
    for entry in sublist:
        # do something with "sublist", "entry"

如果你真的需要索引(在你的情况下你不是这样)你使用enumerate()函数就像这样:

for i_sub, sublist in enumerate(tsdata):
    for i_entry, entry in enumerate(sublist):
        # do something with "i_sub", "sublist", "i_entry", "entry"

答案 2 :(得分:0)

您的解决方案并不错,但以下内容可能更容易理解。 (取决于您的代码后来如何演变)

def new_value(value):
    """Encapsulation of the core treatment"""
    return 0 if (value < min_value) or (value > max_value) else value

new_tsdata = [[new_value(value) for value in row] for row in ts_data]

在python中,你应该寻找新的对象而不是现有的对象修改。