2016-10-11 2 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

Я думаю, вы делаете это слишком сложным. Давайте утверждать, что вы на самом деле хотите сделать самым простым способом:

ЦЕЛЬ: Разделите каждое число п в списке списков по п - 1 или, если п - 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

Это работает, за исключением того, что вы забыли заменить countsminusone на countsminusone1 в своей последней строке.

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)]