Как заменить элементы по значению в списке списков в Python?

#python #list #replace #list-comprehension

#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
  

Комментарии:

1. x == 0 or x < 0 == x < 1 для целых чисел…

2. Или, по крайней мере, x <= 0…

3. Что заставляет вас думать, что это не работает? Пожалуйста, предоставьте реальные и ожидаемые результаты.

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

Ответ №1:

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

ЦЕЛЬ: разделить каждое число 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.

Комментарии:

1. Правильно, лучший ответ

Ответ №2:

Это работает, за исключением того, что вы забыли заменить 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)]