Как найти корень всех чисел списка

Чтобы найти квадратный корень из списка чисел, вы можете использовать функцию numpy.sqrt() в Python.

Функция sqrt() принимает массив (или список) numpy, вычисляет квадратный корень из элементов в списке и возвращает массив с результатом.

Синтаксис

Синтаксис функции:

output = numpy.sqrt([array_like])

Предоставьте sqrt() массив, подобный аргументу, и он вернет ndarray.

Пример 1: из списка чисел

В этом примере мы инициализируем список чисел и найдем квадратный корень из этих чисел.

import numpy as np

#initialize a list
listA = [4, 16, 9, 1, 25, 49]

#find square root of items in the list
output = np.sqrt(listA)

print(output)

Вывод:

[2. 4. 3. 1. 5. 7.]

Мы предоставили точные квадраты в списке, следовательно, мы получили их квадратные корни без десятичного значения.

Пример 2

В этой программе мы предоставим числа, не являющиеся точными квадратами, и найдем их квадратный корень.

import numpy as np

#initialize a list
listA = [2, 3, 5]

#find square root of items in the list
output = np.sqrt(listA)

print(output)

Вывод:

[1.41421356 1.73205081 2.23606798]

Пример 3: нахождение из комплексных чисел

Вы также можете предоставить комплексные числа в качестве элементов списка для вычисления их квадратных корней.

import numpy as np

#initialize a list
listA = [4+1j, 9+16j]

#find square root of items in the list
output = np.sqrt(listA)

print(output)

Вывод:

[2.01532946+0.24809839j 3.69848346+2.16304875j]

Пример 4: из отрицательных чисел

В этом примере мы предоставим некоторые отрицательные числа, sqrt() выдает RuntimeWarning – просто предупреждение. И возвращает nan (не число) для отрицательного элемента в списке.

import numpy as np

#initialize a list
listA = [-4, 9]

#find square root of items in the list
output = np.sqrt(listA)

print(output)

Вывод:

[nan  3.]

This div height required for enabling the sticky sidebar

Hawaiian pilot

3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

1

Нахождения квадратного корня каждого числа из списка

30.09.2021, 19:22. Показов 6226. Ответов 16

Метки math, sqrt (Все метки)


Студворк — интернет-сервис помощи студентам

Помогите пожалуйста понять и исправить ошибку.
Задача: Импортируйте модуль math и воспользуйтесь оттуда функцией sqrt для нахождения квадратного корня каждого числа из списка.
Мой вариант дает ошибку » must be real number, not str»

Python
1
2
3
4
5
6
7
8
9
10
11
 #import math
from math import sqrt  # Импортируем из модуля math функцию sqrt
a = [1, 2, 3, -5, -4, -2, 4]                                   # создаем глобальную переменную а с произвольным списком
def value(a):
  x = 0
  for i in range(-10, 10):
    x = sqrt(str(a))
  return (int('Квадратный корень равен: ', x))
  print('Квадратный корень равен: ', x)
 
value(a)



0



Val Rubis

305 / 186 / 97

Регистрация: 01.05.2014

Сообщений: 517

30.09.2021, 20:06

2

Корень извлекается из числа, а у вас список:

Python
1
x = sqrt(str(a))

Добавлено через 11 минут
В рамках действительных чисел корень из отрицательного числа извлечь нельзя.

Python
1
2
3
4
5
6
7
def v(x):
    for i in range(len(x)):
        x[i] = sqrt(x[i])
    return x
 
 
print(v(a))



0



4075 / 2487 / 525

Регистрация: 07.11.2019

Сообщений: 4,131

30.09.2021, 21:05

3

Hawaiian pilot, вот и спросите себя, ЗАЧЕМ??? вы написали в 7 строке три буквы s, t и r???



0



eaa

Status 418

Эксперт Python

3841 / 2125 / 568

Регистрация: 26.11.2017

Сообщений: 4,987

Записей в блоге: 2

30.09.2021, 21:05

4

Python
1
2
3
4
from math import sqrt
a = [1, 2, 3, 4, 5, 6]
*res, = map(sqrt, a)
print(res)



2



3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

30.09.2021, 21:34

 [ТС]

5

Цитата
Сообщение от Val Rubis
Посмотреть сообщение

Корень извлекается из числа, а у вас список:

это я вижу.
список приплыл из предыдущей задачи
Val Rubis, ваш код не сработал тоже(
u235, ответ простой — когда у новичка что то не идет, идут в ход 33 способа и прилепить можно жопу полярной совы на глобус. бывает, рандомно попадаю )
eaa, спасибо, сработало. Но что такое *res, ?



0



1182 / 758 / 277

Регистрация: 05.09.2021

Сообщений: 1,772

30.09.2021, 21:39

6

Hawaiian pilot, это магия.

Добавлено через 3 минуты
Hawaiian pilot, только она тут не нужна правда.



1



3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

30.09.2021, 21:40

 [ТС]

7

а, поняла, распаковка.
но все таки, как в range по одному и с подписью сделать?



0



enx

1182 / 758 / 277

Регистрация: 05.09.2021

Сообщений: 1,772

30.09.2021, 21:45

8

Лучший ответ Сообщение было отмечено Hawaiian pilot как решение

Решение

Hawaiian pilot, и опять через def? зачем….

Добавлено через 3 минуты
Можно так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from math import sqrt
 
 
def modify_my_int(x: int) -> str:
    '''
    тут сокращение записи до 2 символов после точки
    '''
    return f'Квадратный корень от {x} равен: {sqrt(x):.2f}' if x >= 0 else 'Отрицательное цисло'
 
 
a = [1, 2, 3, -5, -4, -2, 4]
for i in range(len(a)):
    print(modify_my_int(a[i]))



1



Hawaiian pilot

3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

30.09.2021, 21:47

 [ТС]

9

enx, задачи по def
но и в таком варианте не запускается код тоже:

Python
1
2
3
4
5
6
7
8
9
10
from math import sqrt                             # Импортируем из модуля math функцию sqrt
a = 1, 2, 3, 4, 5, 6   
 #def value(a):
  # x = 0
  for i in range(len(a)):
    x = sqrt(a)
  return (int('Квадратный корень равен: ', x))
  print('Квадратный корень равен: ', x)
 
value(a)



0



4075 / 2487 / 525

Регистрация: 07.11.2019

Сообщений: 4,131

30.09.2021, 21:53

10

Hawaiian pilot, потому что методом тыка вы никогда ничему толком не научитесь. Вы не знаете для чего отступы и что return без def не бывает. Почитайте учебник, разберите примеры.



0



1182 / 758 / 277

Регистрация: 05.09.2021

Сообщений: 1,772

30.09.2021, 21:57

11

Hawaiian pilot, бросьте эти задачи, и этот учебник вот прямо сейчас, с разбегу и в костер. Кинул вам вчера ссылки, пройдите по ним.



0



3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

30.09.2021, 22:02

 [ТС]

12

Цитата
Сообщение от u235
Посмотреть сообщение

return без def не бывает

бывает
ну что поделать, учусь я)
читаю и разбираю. и кучу примеров и видео. они не бывают одинаковыми, кроме «привет мир».
я задаю на форум вопрос, когда уже край.
и да, мне тяжело.
и возможно я ходячее пособие, кому не нужно в ИТ.
но я хотя бы пытаюсь что то уловить, а не как 90% студняка кидают задачу тупо — решайте смерды.
()понять и простить



0



Status 418

Эксперт Python

3841 / 2125 / 568

Регистрация: 26.11.2017

Сообщений: 4,987

Записей в блоге: 2

01.10.2021, 06:07

13

Hawaiian pilot, это похвально. только видео не все хороши. читайте книги.



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

35427 / 19452 / 4071

Регистрация: 12.02.2012

Сообщений: 32,486

Записей в блоге: 13

01.10.2021, 07:39

14

Цитата
Сообщение от Hawaiian pilot
Посмотреть сообщение

Val Rubis, ваш код не сработал тоже(

— да неужели? А у меня сработал…



0



3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

01.10.2021, 12:26

 [ТС]

15

Цитата
Сообщение от Catstail
Посмотреть сообщение

— да неужели? А у меня сработал…

охотно верю )
но я еще в тупиковой ветке развития
что-то по типу дать ребенку подгузник, а он — не сработало! а надеть не пробовал? — ухты, а и так можно было?



0



1182 / 758 / 277

Регистрация: 05.09.2021

Сообщений: 1,772

01.10.2021, 12:28

16

Цитата
Сообщение от Hawaiian pilot
Посмотреть сообщение

а надеть не пробовал?

вот это крайне не честно и не справедливо в высказываниях, вам предложили 100500 вариантов по цене 0 рублей.



0



3 / 3 / 0

Регистрация: 18.05.2021

Сообщений: 93

01.10.2021, 12:45

 [ТС]

17

enx, это же самоирония) всем очень благодарна, люди помогают реально бесплатно и без корысти.



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

01.10.2021, 12:45

17

Скачать пример рабочей книги

Загрузите образец книги

Из этого туториала Вы узнаете, как вычислять квадратные корни в Excel и Google Таблицах.

Квадратный корень с использованием функции SQRT

Один из способов найти квадратный корень из числа — использовать функцию КОРЕНЬ. Его синтаксис:

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

Квадратный корень с использованием экспонентного оператора

Другой способ найти квадратный корень из числа — использовать оператор экспоненты (^) с 1/2 в качестве экспоненты.

Давайте найдем квадратный корень из числа, используя оператор экспоненты для того же примера.

Примечание. Убедитесь, что экспонента «1/2» заключена в круглые скобки, чтобы контролировать порядок операций.

Квадратный корень с использованием функции POWER

Функция СТЕПЕНЬ возвращает значение заданного числа в степени. Его синтаксис:

Давайте найдем квадратный корень из числа, используя функцию СТЕПЕНЬ для того же примера.

Квадратный корень отрицательного числа с использованием функции ABS

Функция ABS, которая возвращает абсолютное значение для любого отрицательного числа, может быть вложена в любую из трех функций, описанных выше (функция КОРЕНЬ, оператор экспоненты и функция СТЕПЕНЬ), чтобы найти квадратный корень из отрицательного числа. Его синтаксис:

Давайте найдем квадратный корень из списка отрицательных чисел, используя функцию ABS, вложенную в функцию SQRT.

Функцию ABS можно использовать аналогичным образом для двух других функций (оператора экспоненты и функции СТЕПЕНЬ).

Примечание. Excel возвращает # ЧИСЛО! ошибка, если функция ABS не используется для вычисления квадратного корня из отрицательного числа.

Примечание 2: вместо квадрата числа используйте 2 вместо 1/2.

Эти формулы работают в Google Таблицах точно так же, как и в Excel.

Вы поможете развитию сайта, поделившись страницей с друзьями

Решение в лоб — используем банальную проверку

int a;
std::cin >> a;
int r = (int)sqrt(a);
if (r*r == a) {
    std::cout << a;
}

Конечно, этот способ будет медленный. Но его можно ускорить, используя трюк. Известно, что квадрат любого натурального числа не может заканчиваться 2, 3, 7 и 8. Если числа приходят равномерно, то это сразу отсечет 40% чисел. Если использовать две последние цифры, то можно отсечь 78%. (для 4 последних цифр будет отсекаться 89 процентов, но нужно ли это?)

поэтому код чуточку улучшим.

while (пока есть что читать) {
    int a;
    std::cin >> a;
    int d = a % 10;
    if (d == 2 || d == 3 || d == 7 || d == 8) 
        continue;
    int r = (int)sqrt(a);
    if (r*r == a) {
        std::cout << a;
    }
}

Для того, то бы использовать это в if, заворачиваем в функцию

bool isSqrt(int a)
{
    int d = a % 10;
    if (d == 2 || d == 3 || d == 7 || d == 8) 
        return false;
    int r = (int)sqrt(a);
    return (r*r == a)
}

Ну и не забываем добавить в include файл cmath

upd

если чисел много, и захочется чуточку ускориться, то вот возможные двухцифровые концовки для квадратов чисел

[0, 1, 4, 9, 16, 21, 24, 25, 29, 36, 41, 44, 49, 56, 61, 64, 69, 76, 81, 84, 89, 96]

но использовать лучше это в таком виде

int data[100] = {1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0};
if (data[a % 100] != 1)
    continue;

 

Каждый узел однонаправленного (односвязного) линейного списка (ОЛС) содержит одно поле указателя на следующий узел. Поле указателя последнего узла содержит нулевое значение (указывает на NULL).
Односвязный линейный список
Узел ОЛС можно представить в виде структуры

struct list
{
  int field; // поле данных
  struct list *ptr; // указатель на следующий элемент
};

Основные действия, производимые над элементами ОЛС:

  • Инициализация списка
  • Добавление узла в список
  • Удаление узла из списка
  • Удаление корня списка
  • Вывод элементов списка
  • Взаимообмен двух узлов списка

Инициализация ОЛС

Инициализация списка предназначена для создания корневого узла списка, у которого поле указателя на следующий элемент содержит нулевое значение.
Инициализация односвязного линейного списка

1
2
3
4
5
6
7
8
9

struct list * init(int a) // а- значение первого узла
{
  struct list *lst;
  // выделение памяти под корень списка
  lst = (struct list*)malloc(sizeof(struct list));
  lst->field = a;
  lst->ptr = NULL// это последний узел списка
  return(lst);
}

Добавление узла в ОЛС

Функция добавления узла в список принимает два аргумента:

  • Указатель на узел, после которого происходит добавление
  • Данные для добавляемого узла.

Процедуру добавления узла можно отобразить следующей схемой:
Добавление элемента односвязного линейного списка
Добавление узла в ОЛС включает в себя следующие этапы:

  • создание добавляемого узла и заполнение его поля данных;
  • переустановка указателя узла, предшествующего добавляемому, на добавляемый узел;
  • установка указателя добавляемого узла на следующий узел (тот, на который указывал предшествующий узел).

Таким образом, функция добавления узла в ОЛС имеет вид:

1
2
3
4
5
6
7
8
9
10

struct list * addelem(list *lst, int number)
{
  struct list *temp, *p;
  temp = (struct list*)malloc(sizeof(list));
  p = lst->ptr; // сохранение указателя на следующий узел
  lst->ptr = temp; // предыдущий узел указывает на создаваемый
  temp->field = number; // сохранение поля данных добавляемого узла
  temp->ptr = p; // созданный узел указывает на следующий элемент
  return(temp);
}

Возвращаемым значением функции является адрес добавленного узла.

Удаление узла ОЛС

В качестве аргументов функции удаления элемента ОЛС передаются указатель на удаляемый узел, а также указатель на корень списка.
Функция возвращает указатель на узел, следующий за удаляемым.

Удаление узла может быть представлено следующей схемой:
Удаление элемента односвязного линейного списка
Удаление узла ОЛС включает в себя следующие этапы:

  • установка указателя предыдущего узла на узел, следующий за удаляемым;
  • освобождение памяти удаляемого узла.

1
2
3
4
5
6
7
8
9
10
11
12

struct list * deletelem(list *lst, list *root)
{
  struct list *temp;
  temp = root;
  while (temp->ptr != lst) // просматриваем список начиная с корня
  { // пока не найдем узел, предшествующий lst
    temp = temp->ptr;
  }
  temp->ptr = lst->ptr; // переставляем указатель
  free(lst); // освобождаем память удаляемого узла
  return(temp);
}

Удаление корня списка

Функция удаления корня списка в качестве аргумента получает указатель на текущий корень списка. Возвращаемым значением будет новый корень списка — тот узел, на который указывает удаляемый корень.

1
2
3
4
5
6
7

struct list * deletehead(list *root)
{
  struct list *temp;
  temp = root->ptr;
  free(root); // освобождение памяти текущего корня
  return(temp); // новый корень списка
}

Вывод элементов списка

В качестве аргумента в функцию вывода элементов передается указатель на корень списка.
Функция осуществляет последовательный обход всех узлов с выводом их значений.

1
2
3
4
5
6
7
8
9

void listprint(list *lst)
{
  struct list *p;
  p = lst;
  do {
    printf(«%d «, p->field); // вывод значения элемента p
    p = p->ptr; // переход к следующему узлу
  } while (p != NULL);
}

Взаимообмен узлов ОЛС

В качестве аргументов функция взаимообмена ОЛС принимает два указателя на обмениваемые узлы, а также указатель на корень списка. Функция возвращает адрес корневого элемента списка.

Взаимообмен узлов списка осуществляется путем переустановки указателей. Для этого необходимо определить предшествующий и последующий узлы для каждого заменяемого. При этом возможны две ситуации:

  • заменяемые узлы являются соседями;
  • заменяемые узлы не являются соседями, то есть между ними имеется хотя бы один элемент.

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

Функция взаимообмена узлов списка выглядит следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

struct list * swap(struct list *lst1, struct list *lst2, struct list *head)
{
  // Возвращает новый корень списка
  struct list *prev1, *prev2, *next1, *next2;
  prev1 = head;
  prev2 = head;
  if (prev1 == lst1)
    prev1 = NULL;
  else
    while (prev1->ptr != lst1) // поиск узла предшествующего lst1
      prev1 = prev1->ptr;
  if (prev2 == lst2)
    prev2 = NULL;
  else
    while (prev2->ptr != lst2) // поиск узла предшествующего lst2
      prev2 = prev2->ptr;
  next1 = lst1->ptr;  // узел следующий за lst1
  next2 = lst2->ptr;  // узел следующий за lst2
  if (lst2 == next1)
  {                       // обмениваются соседние узлы
    lst2->ptr = lst1;
    lst1->ptr = next2;
    if (lst1 != head)
      prev1->ptr = lst2;
  }
  else
    if (lst1 == next2)
    {
      // обмениваются соседние узлы
      lst1->ptr = lst2;
      lst2->ptr = next1;
      if (lst2 != head)
        prev2->ptr = lst2;
    }
    else
    {
      // обмениваются отстоящие узлы
      if (lst1 != head)
        prev1->ptr = lst2;
      lst2->ptr = next1;
      if (lst2 != head)
        prev2->ptr = lst1;
      lst1->ptr = next2;
    }
  if (lst1 == head)
    return(lst2);
  if (lst2 == head)
    return(lst1);
  return(head);
}

Назад: Структуры данных

Понравилась статья? Поделить с друзьями:
  • Как найти на ноуте удаленные фото
  • Как найти исковое заявление по фамилии ответчика
  • Физика как найти давление человека
  • Как составить план урока по чтению в 4 классе
  • Как найти тангенс большего угла в треугольнике