@Timebird

Как заменить некоторые значения массива?

Вопрос может показаться громоздким, но он очень простой.
У меня есть два массива: a1 и a2. В массиве a1 все элементы типа int, в массиве a2 есть и int, и str (в случайном порядке там разбросаны).

Если написать for i in list(zip(a1, a2)): print(i), то вывод примерно такой:

...
(array([ 1.]), array([ nan]))
(array([ 1.]), array([ 2.]))
(array([ 2.]), array([ nan]))
(array([ 1.]), array([ nan]))
(array([ 2.]), array([ 1.]))
...


Я хочу, чтобы в случае, если второй элемент пары - целое число, то первый элемент пары заменить на второй элемент пары. Если приводить аналогию с примером выше, то вывод ожидаемо такой:
array([ 1.]
      [ 2.]
      [ 2.]
      [ 1.]
      [ 1.])


Я пытался написать такой код, он не работает (ошибок не выдаёт, но по сути ничего не меняет):
for i in list(zip(a1, a2)):
    if isinstance(i[1], int):
        i[0] == i[1]


List comprehensions выдаёт тот же результат.
a3 = [i[0] == i[1] for i in list(zip(a1, a2)) if isinsance(i[1], int)]


Как написать правильно и в чем моя ошибка?
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
@Stqs
senior software developer
Timebird
такое не подойдет?

for i, e in enumerate(a2):
    if isinstance(e, int):
        a1[i] = e

(я код не запускал если чо)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
aRegius
@aRegius
Python Enthusiast
в чем моя ошибка?

1. Усталость, скорее всего. Именно этим объясняю использование вами оператора сравнения ==, вместо оператора присваивания.

2. Но и в этом случае:
а) Цикл. Python не даст изменить один из элементов кортежа.
б) Генератор списка. Python в принципе не позволит использовать операцию присваивания.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы