现在我正在尝试创建一个小函数,该函数在更改所述列表中的这些数字之前需要两个参数,一个列表和一个限制。 2D列表应该只返回1和0。如果一个元素大于或等于限制,它会将元素更改为1,如果它小于限制,则它变为0.到目前为止,这是我提出的:
def tempLocations(heatMat,tempMat):
newMat=[]
for i in heatMat:
for j in i: #j goes into the list within the list
if j >= tempMat: #if the element of j is greater than or equal to the limit of the matrix
j = 1 #it will turn the element into a 1
newMat.append(j)
else:
if j < tempMat:
j = 0
newMat.append(j)
print newMat
tempLocations([[12,45,33,22,34],[10,25,45,33,60]],30)
这实际上是我想要的,除了它创建一个单独的列表,它将所有的1和0放入。我试图让它保持2D列表样式,同时仍然改变列表中的值,以便我最终得到的不是[0,1,1,0,1,0,0,1,1, 1]而是[[0,1,1,0,1],[0,0,1,1,1]]。我该怎么做呢?任何帮助表示赞赏:)
答案 0 :(得分:2)
这是一个更简单的方法:
data = [[12,45,33,22,34],[10,25,45,33,60]]
mask = [[int(x > 30) for x in sub_list] for sub_list in data]
如果你想把它作为一个以阈值为参数的函数:
def make_mask(thresh, data):
return [[int(x > thresh) for x in sub_list] for sub_list in data]
make_mask(30, data)
对于那些不希望将bool
结果转换为int
(或者可能需要不同于0和1的值)的纯粹主义者,这也很容易阅读:< / p>
[[1 if x > 30 else 0 for x in sub_list] for sub_list in data]
或
def make_mask(thresh, data, hi=1, lo=0):
return [[hi if x > thresh else lo for x in sub_list] for sub_list in data]
例如
In [97]: make_mask(30, data, "hot", "cold")
Out[97]: [['cold', 'hot', 'hot', 'cold', 'hot'], ['cold', 'cold', 'hot', 'hot', 'hot']]
答案 1 :(得分:1)
list1 = [0,0,0,1,1]
list2 = [1,1,1,0,0]
wrap = []
wrap.append(list1)
wrap.append(list2)
然后wrap == [[0,0,0,1,1],[1,1,1,0,0]]
这样的东西?然后,您可以根据需要更改list1
和list2
,并将其反映在wrap
中。
答案 2 :(得分:1)
您正在使用空列表初始化newMat
,然后为其添加数字,因此最终newMat
仍将是一个列表。一种可能的解决方案是使用在内部循环之前用空列表初始化的中间列表,在内部循环中向它添加元素(而不是newMat
),并在内部循环之后将此中间列表附加到{{1 }}
答案 3 :(得分:1)
def tempLocations(heatMat,tempMat):
newMat=[]
for i in heatMat:
newRow=[]
for j in i:
if j >= tempMat:
j = 1
else:
j = 0
newRow.append(j)
newMat.append(newRow)
print newMat
答案 4 :(得分:0)
只需对原始代码进行一些调整 - 在内循环之前,创建一个新列表并将所有的1和0放入其中,然后在该列表完成后将其附加到 main 列表。我还在函数中添加了一个return语句,将新列表返回给调用它的语句:
def tempLocations(heatMat,tempMat):
newMat = []
for i in heatMat:
inner_list = list()
for j in i: #j goes into the list within the list
if j >= tempMat: #if the element of j is greater than or equal to the limit of the matrix
j = 1 #it will turn the element into a 1
elif j < tempMat:
j = 0
#append to the inner list
inner_list.append(j)
# append inner_list to the outer list when done
newMat.append(inner_list)
#return the new list to the calling statement
return newMat
new = tempLocations([[12,45,33,22,34],[10,25,45,33,60]],30)
print new
>>>
[[0, 1, 1, 0, 1], [0, 0, 1, 1, 1]]
>>>