#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. Пример правильный, нам просто нужно переместить отрицательный символ со второго элемента на первый