Напишите метод, который принимает массив как аргумент и возвращает N
Как вы узнали (в коде предложенного вопроса), что первый массив почти полностью из чётных, и второй из нечётных чисел? Глазами?
3 авг 2018 в 19:37
5 ответов 5
Сортировка: Сброс на вариант по умолчанию
Добавлю до кучи своё в некотором роде универсальное решение (никаких if -ов, например):
def find_rare_item(arr): d = <> for x in arr: i = x % 2 d[i] = d.get(i, []) d[i].append(x) return min(d.values(), key=lambda x: len(x)) array_1 = [2, 4, 0, 100, 4, 11, 2602, 36] print(*find_rare_item(array_1)) array_2 = [160, 3, 1719, 19, 11, 13, -21] print(*find_rare_item(array_2))
11 160
- Кладём элементы в список в словаре по ключу «чёт/нечёт»
- Ищем, в каком из этих списков получилось меньше элементов
- Выводим этот редкий элемент (или элементы)
Метод действительно универсальный:
- Он может работать не только по принципу чёт / не чёт , но и по любому другому принципу
- Число редких/частых элементов тут не важно, выводится столько редких элементов, сколько есть в наличии
Отслеживать
ответ дан 24 авг 2021 в 10:28
68.2k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
Раз нормальные варианты уже написали, предложу другие 🙂
def foo(items): odd = list(filter(lambda x: x % 2 == 1, items)) if len(odd) == 1: return odd[0] even = list(filter(lambda x: x % 2 == 0, items)) return even[0] if __name__ == '__main__': items = [2, 4, 0, 100, 4, 11, 2602, 36] print(foo(items)) # 11 items = [160, 3, 1719, 19, 11, 13, -21] print(foo(items)) # 160
from collections import defaultdict def foo(items): bool_by_items = defaultdict(list) for i in items: bool_by_items[i % 2 == 1].append(i) odd = bool_by_items[True] if len(odd) == 1: return odd[0] even = bool_by_items[False] return even[0] if __name__ == '__main__': items = [2, 4, 0, 100, 4, 11, 2602, 36] print(foo(items)) # 11 items = [160, 3, 1719, 19, 11, 13, -21] print(foo(items)) # 160
Как реализовать функцию, которая принимает массив с числами, и возвращает сумму этих чисел?
Всем привет, завис на решении данной задачи.
Задачу нужно решить через forEach.
function sumArray(arr) < let newArr = []; let sum = 0; arr.forEach((item) =>< sum = sum + item; newArr.push(sum); >) return newArr; >
- Вопрос задан более года назад
- 747 просмотров
1 комментарий
Простой 1 комментарий
самое простое решение reduce — метод для работы с массивом
myArray.reduce((acc,item) => acc+item);
Решения вопроса 1
VoidVolker @VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Так и возвращайте сумму, а не новый массив. Да и копировать содержимое массива в новый тоже нет необходимости.
Ответ написан более года назад
Нравится 1 1 комментарий
vtaeke @vtaeke Автор вопроса
Понял, спасибо.
Ответы на вопрос 1
Сергей Соколов @sergiks Куратор тега JavaScript
Когда речь идёт о том, чтобы из целого массива получить в итоге что-то «одно»
( «много» → «одно»; [1, 2, 3] → X )
то может быть удобно использовать метод массива reduce()
Попробуйте разобраться, как его использовать в вашей задаче «массив → сумма». Получится решение в 1 строку. Поиск по ответам здесь может навести на готовые решения.
P.S. не заметил требование решить через forEach()
Функции и их аргументы
В этой статье я планирую рассказать о функциях, именных и анонимных, инструкциях def, return и lambda, обязательных и необязательных аргументах функции, функциях с произвольным числом аргументов.
Именные функции, инструкция def
Функция в python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def.
Определим простейшую функцию:
Инструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y.
Теперь мы ее можем вызвать:
Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None:
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
Функция также может принимать переменное количество позиционных аргументов, тогда перед именем ставится *:
Как видно из примера, args - это кортеж из всех переданных аргументов функции, и с переменной можно работать также, как и с кортежем.
Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **:
В переменной kwargs у нас хранится словарь, с которым мы, опять-таки, можем делать все, что нам заблагорассудится.
Анонимные функции, инструкция lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно присваивать переменной, как делали мы инструкцией def func():
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Строки
Мы уже рассматривали строки как простой тип данных наряду с целыми и вещественными числами и знаем, что строка – это последовательность символов, заключенных в одинарные или двойные кавычки.
В Python нет символьного типа – типа данных, объектами которого являются одиночные символы. Однако язык позволяет рассматривать строки как объекты, состоящие из подстрок длинной в один и более символов. При этом, в отличие от списков, строки не принято относить к структурам данных. Видимо потому, что структуры данных состоят из более простых типов данных, а для строк в Python нет более простого (символьного) типа.
С другой стороны, строка, как и список, – это упорядоченная последовательность элементов. Следовательно, из нее можно извлекать отдельные символы и срезы.
>>> s = "Hello, World!" >>> s[0] 'H' >>> s[7:] 'World!' >>> s[::2] 'Hlo ol!'
В последнем случае извлечение идет с шагом, равным двум, то есть извлекается каждый второй символ. Извлекать срезы с шагом также можно из списков.
Важным отличием от списков является неизменяемость строк в Python. Нельзя перезаписать какой-то отдельный символ или срез в строке:
>>> s[-1] = '.' Traceback (most recent call last): File "", line 1, in TypeError: 'str' object does not support item assignment
Интерпретатор сообщает, что объект типа str не поддерживает присвоение элементам.
Если требуется изменить строку, то можно создать новую из срезов старой:
>>> s = s[0:-1] + '.' >>> s 'Hello, World.'
В примере берется срез из исходной строки, соединяется с другой строкой. Получается новая строка, которая присваивается переменной s . Ее старое значение при этом теряется.
Методы строк
В Python для строк есть множество методов. Посмотреть их можно по команде dir(str) , получить информацию по каждому – help(str.имя_метода) . Рассмотрим наиболее интересные из них.
Методы split() и join()
Метод split() позволяет разбить строку по пробелам. В результате получается список слов. Если пользователь вводит в одной строке ряд слов или чисел, каждое из которых должно в программе обрабатываться отдельно, то без split() не обойтись.
>>> s = input() red blue orange white >>> s 'red blue orange white' >>> sl = s.split() >>> sl ['red', 'blue', 'orange', 'white'] >>> s 'red blue orange white'
Список, возвращенный методом split() , мы могли бы присвоить той же переменной s , то есть s = s.split() . Тогда исходная строка была бы потеряна. Если она не нужна, то лучше не вводить дополнительную переменную.
Метод split() может принимать необязательный аргумент-строку, указывающей по какому символу или подстроке следует выполнить разделение:
>>> s.split('e') ['r', 'd blu', ' orang', ' whit', ''] >>> '40030023'.split('00') ['4', '3', '23']
Метод строк join() выполняет обратное действие. Он формирует из списка строку. Поскольку это метод строки, то впереди ставится строка-разделитель, а в скобках — передается список:
>>> '-'.join(sl) 'red-blue-orange-white'
Если разделитель не нужен, то метод применяется к пустой строке:
>>> ''.join(sl) 'redblueorangewhite'
Методы find() и replace()
Данные методы строк работают с подстроками. Методы find() ищет подстроку в строке и возвращает индекс первого элемента найденной подстроки. Если подстрока не найдена, то возвращает -1.
>>> s 'red blue orange white' >>> s.find('blue') 4 >>> s.find('green') -1
Поиск может производиться не во всей строке, а лишь на каком-то ее отрезке. В этом случае указывается первый и последний индексы отрезка. Если последний не указан, то ищется до конца строки:
>>> letters = 'ABCDACFDA' >>> letters.find('A', 3) 4 >>> letters.find('DA', 0, 6) 3
Здесь мы ищем с третьего индекса и до конца, а также с первого и до шестого. Обратите внимания, что метод find() возвращает только первое вхождение. Так выражение letters.find('A', 3) последнюю букву 'A' не находит, так как 'A' ему уже встретилась под индексом 4.
Метод replace() заменяет одну подстроку на другую:
>>> letters.replace('DA', 'NET') 'ABCNETCFNET'
Исходная строка, конечно, не меняется:
>>> letters 'ABCDACFDA'
Так что если результат надо сохранить, то его надо присвоить переменной:
>>> new_letters = letters.replace('DA', 'NET') >>> new_letters 'ABCNETCFNET'
Метод format()
Строковый метод format() уже упоминался при рассмотрении вывода на экран с помощью функции print() :
>>> print("This is a . It's .".format("ball", "red")) This is a ball. It's red.
Однако к print() он никакого отношения не имеет, а применяется к строкам. Лишь потом заново сформированная строка передается в функцию вывода.
Возможности format() широкие, рассмотрим основные.
>>> s1 = "length - <>, width - <>, height - <>" >>> s1.format(3, 6, 2.3) 'length - 3, width - 6, height — 2.3'
Если фигурные скобки исходной строки пусты, то подстановка аргументов идет согласно порядку их следования. Если в фигурных скобках строки указаны индексы аргументов, порядок подстановки может быть изменен:
>>> s2 = "height - , length - " >>> s2.format(3, 6) 'height - 6, length - 3'
Кроме того, аргументы могут передаваться по слову-ключу:
>>> info = "This is a . It's ." >>> info.format(subj="table", prop="small") "This is a table. It's small."
Пример форматирования вещественных чисел:
>>> " ".format(3.33333, 10/6) '1.67 3.333'
Практическая работа
- Вводится строка, включающая строчные и прописные буквы. Требуется вывести ту же строку в одном регистре, который зависит от того, каких букв больше. При равном количестве преобразовать в нижний регистр. Например, вводится строка "HeLLo World", она должна быть преобразована в "hello world", потому что в исходной строке малых букв больше. В коде используйте цикл for , строковые методы upper() (преобразование к верхнему регистру) и lower() (преобразование к нижнему регистру), а также методы isupper() и islower() , проверяющие регистр строки или символа.
- Строковый метод isdigit() проверяет, состоит ли строка только из цифр. Напишите программу, которая запрашивает с ввода два целых числа и выводит их сумму. В случае некорректного ввода программа не должна завершаться с ошибкой, а должна продолжать запрашивать числа. Обработчик исключений try-except использовать нельзя.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
