Проблема с 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')
→ Ссылка