我是Python的新手,但有C / C ++背景。 我试图修改满足条件的2D列表(列表列表)元素。 我能想出的就是以下解决方案:
#parent0:hover #child0
我确信有一个更好的解决方案,它实际上适合Python,但不能想到任何其他实际工作。
编辑:实际上,列表tsdata是一个函数参数,我试图修改它,所以你的一些答案不起作用。我编辑了代码,所以这很清楚。
答案 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中,你应该寻找新的对象而不是现有的对象修改。