2016-10-11 69 views
-1

我:如何用Python中的列表列表中的值替换元素?

counts = [[2, 2, 2, 0], [2, 2, 1, 0]] 
countsminusone = [[1, 1, 1, -1], [1, 1, 0, -1]] #Which is counts - 1 

对于每一个值,其中countsminusone为0或小于0,我想用1

countsminusone1 = [[1 if x == 0 or x < 0 else x for x in pair] for pair in countsminusone] #I cannot get this to work 

来代替它,然后通过countsminusone划分数

Divide = [[n/d for n, d in zip(subq, subr)] for subq, subr in zip(counts, countsminusone)] #This should work if the above works 
+2

'x == 0或x <0' =='x <1'为整数... – brianpck

+3

或者至少x <= 0 ... –

+0

是什么让你觉得它不起作用?请提供真实和预期的结果。 –

回答

2

我觉得你让这太复杂了。让我们来说明你真的想以最简单的方式做什么:

目标:除以每个数N乘N的名单列表 - 1,如果n - 1 < = 0,由1

这可以在不产生额外的列表和拉拉链来完成:

counts = [[2, 2, 2, 0], [2, 2, 1, 0]] 
divided = [[i/max(i - 1, 1) for i in sublst] for sublst in counts] 

注意,在这种情况下,max(i - 1, 1)总是为1

+0

正确,最佳答案 –

1

它的工作原理,但你忘了在最后一行中用countsminusone1代替countsminusone

countsminusone1 = [[1 if x <= 0 else x for x in pair] for pair in countsminusone] 
Divide = [[n/d for n, d in zip(subq, subr)] for subq, subr in zip(counts, countsminusone1)]