Проблема с if/else
Задача: Дан список [0, 12, 1, 3, 5, 0, 0, 55, 22]. Пройтись по списку и если элемент <= 0, то вместо него вывести символ 'x'. Ниже даны 3 реализации этой задачи, но правильно работает только "Solution #1". Не могу разобраться по какой причине.
Код:
arr = [0, 12, 1, 3, 5, 0, 0, 55, 22]
arr2 = [0, 12, 1, 3, 5, 0, 0, 55, 22]
arr3 = [0, 12, 1, 3, 5, 0, 0, 55, 22]
print("arr: ", arr, end='\n')
# Solution 1
print("\nSolution #1", end='\n')
print([x if x > 0 else 'x' for x in arr], end='\n')
# Solution 2
print("\nSolution #2", end='\n')
print([[x, 'x'][x > 0] for x in arr2], end='\n')
# Solution 3
print("\nSolution #3", end='\n')
print(list(map(lambda x: [x, 'x'][x > 0], arr3)), end='\n')
Вывод:
arr: [0, 12, 1, 3, 5, 0, 0, 55, 22]
Solution #1
['x', 12, 1, 3, 5, 'x', 'x', 55, 22]
Solution #2
[0, 'x', 'x', 'x', 'x', 0, 0, 'x', 'x']
Solution #3
[0, 'x', 'x', 'x', 'x', 0, 0, 'x', 'x']
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
потому что если x > 0 то это True, а True это 1, и поэтому у вас берётся 'x' а не x
вам надо либо поменять > на <= либо поменять местами элементы массива
print([[x, 'x'][x <= 0] for x in arr2], end='\n')
#либо
print([['x', x][x > 0] for x in arr2], end='\n')