Замена отрицательного знака в списке python

#python #list #numbers #negative-number

#python #Список #числа #отрицательное число

Вопрос:

 x = [[-123 456],[567 -8910],[432 -890], [-567 976]]
 

У меня есть список list, я хочу поменять местами отрицательный символ элементов x и y списка, если x не отрицательный, его следует изменить на отрицательный, а если y отрицательный, его следует изменить на положительный (просто нужно изменить символ).

Это должно быть так:

 x = [[-123 456],[-567 8910],[-432 890], [-567 976]]

 

Я также хочу извлечь все элементы x в отдельный список (например: u = [-123,-567,-432,-567]) и y элементов в отдельном списке (например: v = [456, 8910, 980, 976]). Пожалуйста, предложите возможные решения.

Проблема, с которой я сталкиваюсь, заключается в том, что между элементами нет запятых

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

1. - number перевернет знак числа.

2. Можете ли вы продемонстрировать какие- либо усилия по решению этой проблемы самостоятельно?

3. Вы можете сделать это с помощью вложенных списков.

4. Кстати, во внутренних списках отсутствуют запятые.

5. Если между внутренними элементами нет запятых, то это синтаксическая ошибка . Вы не можете создать список списков, не имея запятой между элементами внутреннего списка и между элементами внешнего списка. Это пользовательский ввод текста или что-то в этом роде?

Ответ №1:

По сути, вы хотите, чтобы все x были отрицательными, а все y — положительными. abs здесь может быть очень полезно. Нет необходимости проверять, отрицательный или нет.

 data = [[-123, 456], [567, -8910], [432, -890], [-567, 976]]

output = [[-abs(x), abs(y)] for x, y in data]
 

И чтобы получить все x и все y в списке, это еще одно простое понимание, просто исключите значение, которое вам не нужно.

 all_x = [x for x, y in data]
all_y = [y for x, y in data]
 

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

1. abs() всегда возвращает положительные числа. -abs(x) когда x это -123 будет -123 . Вы не переворачиваете знак.

2. @barmar Правильно. Они не хотят, чтобы это было перевернуто в этой ситуации.

3. Понятно, я не понял, что правило отличается для x и y. Думал, что они просто хотели все перевернуть.

Ответ №2:

 import numpy as np
data = np.array([[-123, 456],[567, -8910],[432, -890], [-567, 976]])

# Negative-Number
for i in range(data.shape[0]):
  if(data[i][0]>0):
    data[i][0] = data[i][0]*-1
  if(data[i][1]<0):
    data[i][1] = data[i][1]*-1

# Store results
all_x = [x for x, y in data]
all_y = [y for x, y in data]
 

Вывод:

 print("Output:n",data)
print("all_x:n",all_x)
print("all_y:n",all_y)

Output:
 [[-123  456]
 [-567 8910]
 [-432  890]
 [-567  976]]
all_x:
 [-123, -567, -432, -567]
all_y:
 [456, 8910, 890, 976]
 

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

1. Почему вы используете numpy, если вы не используете numpy

2. Просто плохая привычка, я думаю

Ответ №3:

Довольно просто, если вы можете использовать numpy:

 import numpy as np

x = np.array([[-123, 456],[567, -8910],[432, -890], [-567, 976]])
out = np.abs(x) * [-1, 1]

print(out)
 

Результат:

 > [[-123  456]
 [-567 8910]
 [-432  890]
 [-567  976]]
 

Чтобы разделить на отдельные массивы, просто используйте нарезку массива:

 xArr = out[:,0]
yArr = out[:,1]
 

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

1. Вывод для последнего списка неверен. Это должно быть [-567, 976] в соответствии с OP.

2. Я думаю, что это должна быть опечатка в примере OP, поскольку это, похоже, не соответствует его требованиям

3. Основная проблема заключается в том, что между элементами нет запятых, поэтому я каждый раз получаю ошибку,

4. Пример правильный, нам просто нужно переместить отрицательный символ со второго элемента на первый