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