nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds
Gives:
>>>
[1, 3, 5, 7, 9, 11]
This can be put into a function like so:
def getOdds(aList):
return [ n for n in aList if n%2 ]
Example usage:
myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))
Produces:
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36
As to what you’re doing wrong, you’re iterating over an iterable containing the elements 0
to size
this won’t always be the value of num
(unless num
is indeed range(size)
). Once you make i
represent a value in num
which you’re iterating over, if i%2 == 0
will mean it’s even, if you want odds, the number musn’t be divisible by two. Hence this should be changed to either if i%2 != 0
or if i%2
. You will also have to declare the odd
list before the for i ...
loop, so you can append the numbers in num
which meet the condition in the if i%2
selection control structure. You should appened the number in num
by doing odd.append(i)
, at the moment you’re reassigning odd a new value. You also should not be incrementing i
. ‘i’ should represent a number in num
not the index of the number in num
.
Для целочисленного массива дубликаты присутствуют в нем таким образом, что все дубликаты появляются четное количество раз, кроме одного, который появляется нечетное количество раз. Найдите этот странный появляющийся элемент за линейное время и без использования дополнительной памяти.
Например,
Input: arr[] = [4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3]
Output: The odd occurring element is 4
Потренируйтесь в этой проблеме
Для ввода, содержащего n
элементы, мы можем использовать Хеширование решить эту проблему в O(n) время. Сначала мы просматриваем массив и сохраняем частоту каждого элемента в хеш-таблице. Затем, после обработки каждого элемента массива, вернуть элемент с нечетной частотой. Проблема этого подхода в том, что он требует O(n) также дополнительное пространство. Кроме того, требуется один обход массива и один обход хеш-таблицы.
Мы можем решить эту проблему за один обход массива и константного пространства. Идея состоит в том, чтобы использовать оператор XOR. Мы знаем, что если мы используем XOR числа с самим собой нечетное количество раз, результатом будет само число; в противном случае, если мы выполняем XOR числа четное количество раз с самим собой, результатом будет 0. Кроме того, XOR числа с 0 всегда является самим числом.
XOR of ‘x’ with 0:
x ^ 0 = x
XOR of ‘x’ with itself even number of times:
x ^ x = 0
x ^ x ^ x ^ x = (x ^ x) ^ (x ^ x) = 0 ^ 0 = 0
XOR of ‘x’ with itself odd number of times:
(x ^ x ^ x) = (x ^ (x ^ x)) = (x ^ 0) = x
(x ^ x ^ x ^ x ^ x) = (x ^ (x ^ x) ^ (x ^ x)) = (x ^ 0 ^ 0) = x
Итак, если мы возьмем XOR для всех элементов массива, даже появляющиеся элементы отменят друг друга, и у нас останется единственный нечетный появляющийся элемент. Ниже приведена реализация этой идеи на C, Java и Python:
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> // Функция для поиска нечетного элемента в заданном массиве int findOddOccuring(int arr[], int n) { int xor = 0; for (int i = 0; i < n; i++) { xor = xor ^ arr[i]; } return xor; } int main() { int arr[] = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; int n = sizeof(arr) / sizeof(arr[0]); printf(“The odd occurring element is %d”, findOddOccuring(arr, n)); return 0; } |
Скачать Выполнить код
результат:
The odd occurring element is 4
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <vector> #include <numeric> using namespace std; // Функция для поиска нечетного элемента в заданном массиве int findOddOccuring(vector<int> const &arr) { return accumulate(arr.begin(), next(arr.begin(), arr.size()), 0, bit_xor<int>()); } int main() { vector<int> arr = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; cout << “The odd occurring element is “ << findOddOccuring(arr); return 0; } |
Скачать Выполнить код
результат:
The odd occurring element is 4
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Main { // Функция для поиска нечетного элемента в заданном массиве public static int findOddOccuring(int[] arr) { int xor = 0; for (int i: arr) { xor = xor ^ i; } return xor; } public static void main(String[] args) { int[] arr = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; System.out.println(“The odd occurring element is “ + findOddOccuring(arr)); } } |
Скачать Выполнить код
результат:
The odd occurring element is 4
Python
# Функция для поиска нечетного элемента в заданном списке def findOddOccuring(arr): xor = 0 for i in arr: xor = xor ^ i return xor if __name__ == ‘__main__’: arr = [4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3] print(‘The odd occurring element is’, findOddOccuring(arr)) |
Скачать Выполнить код
результат:
The odd occurring element is 4
nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds
дает:
>>>
[1, 3, 5, 7, 9, 11]
Это может быть помещено в функцию следующим образом:
def getOdds(aList):
return [ n for n in aList if n%2 ]
Пример использования:
myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))
Производит:
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36
Что касается того, что вы делаете неправильно, вы перебираете итерацию, содержащую элементы 0
в size
это не всегда будет ценность num
(Если не указано num
это действительно range(size)
). Как только вы сделаете i
представлять значение в num
который вы повторяете, if i%2 == 0
будет означать, что четное, если вы хотите шансы, число не делится на два. Следовательно, это должно быть изменено на if i%2 != 0
или же if i%2
, Вы также должны будете объявить odd
список перед for i ...
цикл, так что вы можете добавить числа в num
которые отвечают условию в if i%2
структура выбора управления. Вы должны добавить номер в num
при выполнении odd.append(i)
, в данный момент вы переназначаете нечетное новое значение. Вы также не должны увеличивать i
, “Я” должен представлять число в num
не индекс числа в num
,
Печать четных и нечетных чисел из списка Python – хорошее упражнение, если вы только начинаете работать с Python и хотите изучить его основы.
Чтобы извлечь четные и нечетные числа из списка Python, вы можете использовать цикл for и оператор Python по модулю. Второй вариант – заменить цикл for на понимание списка. Расширенный синтаксис оператора среза также позволяет нам делать это с помощью одной строки кода, но только тогда, когда у вас есть списки последовательных чисел.
В этом руководстве мы рассмотрим несколько примеров, и цель реализации нескольких способов решения одной и той же проблемы – развить творческий потенциал, необходимый вам как разработчику Python.
Давайте начнем!
Как вывести нечетные числа из списка в Python?
Чтобы вывести нечетные числа из списка чисел, вы можете использовать оператор Python по модулю, связанный с математической концепцией остатка.
При делении нечетного числа на 2 остаток от деления равен 1. При делении четного числа на 2 остаток от деления равен 0.
Давайте воспользуемся этой концепцией и циклом Python for для вывода нечетных чисел из списка.
def get_odd_numbers(numbers): odd_numbers = []
for number in numbers: if number % 2 == 1: odd_numbers.append(number)
return odd_numbers
Перед запуском цикла for мы определяем пустой список, затем на каждой итерации цикла for мы добавляем в список нечетные числа.
numbers = [2, 3, 6, 8, 13, 45, 67, 88, 99, 100] print(get_odd_numbers(numbers))
[output] [3, 13, 45, 67, 99]
Как вывести четные числа из списка в Python?
Это очень похоже на то, что мы видели в предыдущем разделе …
Чтобы вывести четные числа из списка чисел, мы можем извлечь числа, которые при делении на 2 возвращают остаток, равный 0.
Код идентичен тому, который мы создали для извлечения нечетных чисел с небольшой разницей в условии if внутри цикла for.
def get_even_numbers(numbers): even_numbers = []
for number in numbers: if number % 2 == 0: even_numbers.append(number)
return even_numbers
И результат функции …
numbers = [2, 3, 6, 8, 13, 45, 67, 88, 99, 100] print(get_even_numbers(numbers))
[output] [2, 6, 8, 88, 100]
Как создать функцию, разделяющую четные и нечетные числа в списке
Чтобы разделить нечетные и четные числа в списке, мы могли бы использовать тот же подход, основанный на цикле for, который использовался ранее, и сгенерировать два разных списка, один для нечетных и один для четных чисел.
Вместо этого я хочу сделать наш код более кратким, используя понимание списков.
Мы по-прежнему будем использовать понятие остатка …
Давайте создадим базовую функцию, которая принимает список в качестве аргумента и возвращает два списка, один из которых содержит нечетные числа, а другой – четные.
def split_list_even_odd(numbers):
odd_numbers = [number for number in numbers if number % 2 == 1]
even_numbers = [number for number in numbers if number % 2 == 0]
return odd_numbers, even_numbers
Обратите внимание, что эта функция возвращает два списка Python.
Вы знаете, в каком формате эти списки получает вызывающий функцию?
Давайте разберемся…
numbers = [2, 3, 6, 8, 13, 45, 67, 88, 99, 100] print(split_list_even_odd(numbers))
[output] ([3, 13, 45, 67, 99], [2, 6, 8, 88, 100])
Вызывающая функция получает кортеж с двумя элементами. Мы можем получить доступ к каждому из них, используя квадратные скобки и индекс.
print("The odd numbers are {}".format(split_list_even_odd(numbers)[0])) print("The even numbers are {}".format(split_list_even_odd(numbers)[1]))
[output] The odd numbers are [3, 13, 45, 67, 99] The even numbers are [2, 6, 8, 88, 100]
Если вы хотите узнать больше о синтаксисе .format (), используемом в операторе печати, вы можете взглянуть на этот учебник по объединению строк Python.
Программа для печати четных и нечетных чисел от 1 до 100
Чтобы напечатать четные и нечетные числа от 1 до 100, мы могли бы сначала создать наш список чисел вручную, но это займет много времени!
Вместо этого мы будем использовать функцию Python range ().
Вот как вы можете генерировать числа от 1 до 100 с помощью функции Python range ().
>>> numbers = range(1,101)
>>> print(type(numbers))
<class 'range'>
Интересно, что тип объекта, возвращаемого функцией range (), не является списком.
Итак, что мы можем с этим сделать?
Мы все еще можем использовать цикл for или понимание списка, чтобы просмотреть все числа …
>>> [number for number in numbers]
[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, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
Используйте созданную нами ранее функцию для печати четных и нечетных чисел.
def split_list_even_odd(numbers): odd_numbers = [number for number in numbers if number % 2 == 1] even_numbers = [number for number in numbers if number % 2 == 0] return odd_numbers, even_numbers
numbers = range(1,101) print("The odd numbers are {}".format(split_list_even_odd(numbers)[0])) print("The even numbers are {}".format(split_list_even_odd(numbers)[1]))
[output] The odd numbers are [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99] The even numbers are [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
Как вывести нечетные числа из списка последовательных чисел в Python?
Самый простой способ распечатать нечетные числа из списка последовательных чисел – использовать расширенный синтаксис оператора среза.
Оператор среза возвращает фрагмент списка с заданным начальным индексом (включенным) и конечным индексом (не включенным).
list[start_index:end_index]
Давайте создадим список, содержащий числа от 1 до 10:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Чтобы получить первые 4 элемента списка со стандартным синтаксисом оператора среза, мы можем использовать следующее выражение.
>>> numbers[0:4]
[1, 2, 3, 4]
Примечание: как упоминалось ранее, конечный индекс не включается в список, возвращаемый оператором среза.
Чтобы получить полный список с помощью оператора среза, вы можете использовать следующий синтаксис:
>>> numbers[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Хорошо, но как это помогает нам получать только нечетные числа?
Для этого мы должны кое-что добавить к базовому синтаксису оператора среза, поэтому он называется расширенным синтаксисом.
С расширенным синтаксисом вы можете передать третий аргумент оператору среза – этот аргумент определяет шаг между элементами, которые должны быть извлечены из списка.
list[start_index:end_index:step]
Например, если значение шага равно 2, оператор среза будет извлекать каждые 2 числа.
Теперь, когда мы это знаем, мы готовы извлечь нечетные числа из нашего списка …
>>> numbers[::2]
[1, 3, 5, 7, 9]
В основном мы получаем полный список, потому что мы не указали начальный и конечный индексы. Кроме того, мы получаем только нечетные числа, потому что мы указали шаг, равный 2.
Как вывести четные числа из списка последовательных чисел в Python?
Это очень похоже на то, что мы видели в предыдущем разделе …
Чтобы распечатать четные числа из списка последовательных чисел Python, вы можете использовать расширенный синтаксис среза с начальным индексом, равным 1, пустым конечным индексом и шагом, равным 2.
>>> numbers[1::2]
[2, 4, 6, 8, 10]
И вуаля!
Это довольно просто, если вы привыкнете к синтаксису оператора среза.
Программа Python для печати наибольшего четного и наибольшего нечетного числа в списке
Чтобы напечатать наибольшее четное и нечетное число в списке Python, мы можем начать с понятий, которые мы видели ранее, связанных с оператором среза.
Еще нам необходимо применить функцию max () к списку, возвращаемому оператором среза.
Наибольшее нечетное число
>>> max(numbers[::2])
9
Наибольшее четное число
>>> max(numbers[1::2])
10
Красиво и просто 🙂
Разработайте программу Python, которая считает четные и нечетные числа в списке, предоставленном пользователем
Прежде чем завершить это руководство, давайте посмотрим, как мы можем использовать функцию ввода Python для получения списка чисел из пользовательского ввода.
Прежде всего, я хочу увидеть, какой тип данных мы получаем от пользовательского ввода.
>>> numbers = input("Please provide a list of numbers (separated by space): ")
Please provide a list of numbers (separated by space): 1 3 6 37 56 23 89 103 346
>>> print(numbers)
1 3 6 37 56 23 89 103 346
>>> print(type(numbers))
<class 'str'>
Пользовательский ввод представляет собой одну строку, поэтому нам нужно немного манипулировать строкой, чтобы сначала преобразовать ее в список.
Метод Python string split () позволяет преобразовать строку в список.
>>> print(numbers.split())
['1', '3', '6', '37', '56', '23', '89', '103', '346']
Это шаг вперед, но у нас все еще есть список строк, а вместо него нужен список целых чисел.
Понимание списка и функция Python int () могут использоваться для преобразования списка строк в список целых чисел:
>>> numbers = ['1', '3', '6', '37', '56', '23', '89', '103', '346']
>>> [int(number) for number in numbers]
[1, 3, 6, 37, 56, 23, 89, 103, 346]
Отлично! 🙂
И теперь мы готовы создать нашу функцию, которая преобразует строку, предоставленную пользователем, в список целых чисел.
def get_integers(numbers):
return [int(number) for number in numbers.split()]
После преобразования пользовательского ввода в список целых чисел мы можем вызвать созданную ранее функцию split_list_even_odd ().
Вот полная программа:
def get_integers(numbers): return [int(number) for number in numbers.split()]
def split_list_even_odd(numbers): odd_numbers = [number for number in numbers if number % 2 == 1] even_numbers = [number for number in numbers if number % 2 == 0] return odd_numbers, even_numbers
numbers = input("Please provide a list of numbers (separated by space): ") numbers = get_integers(numbers) print("The odd numbers are {}".format(split_list_even_odd(numbers)[0])) print("The even numbers are {}".format(split_list_even_odd(numbers)[1]))
Выполняем нашу программу…
Please provide a list of numbers (separated by space): 1 3 6 34 56 43 67 88 101 102 134
The odd numbers are [1, 3, 43, 67, 101]
The even numbers are [6, 34, 56, 88, 102, 134]
Оно работает!!
Заключение
Если у вас были какие-либо сомнения по поводу извлечения четных и нечетных чисел из списка Python перед чтением этой статьи…
… Теперь у вас есть все необходимые для этого знания.
Если вы чувствуете, что некоторые вещи все еще неясны, вернитесь и самостоятельно перепишите примеры в этом руководстве с нуля.
Практика – лучший способ изучить и запомнить конструкции Python.
Удачного кодирования! : D
Первоначально опубликовано на https://codefather.tech 25 июля 2021 г.
Больше контента на plainenglish.io
нужно подсчитать количество нечетных чисел в массиве.Делать за меня прогамму не надо.Только навести на мысль.
def createArray():
import random
lengthArray = int(input("Введите колво чисел от 0 до 50:"))
array = []
for i in range(lengthArray):
array.append(random.randint(0, 50))
return array
Twiss
6,3434 золотых знака24 серебряных знака53 бронзовых знака
задан 8 апр 2018 в 16:19
1
Чтобы найти сколько чисел нечётные в заданной коллекции:
odd_count = sum(1 for n in numbers if n & 1)
ответ дан 8 апр 2018 в 21:07
jfsjfs
51.8k11 золотых знаков107 серебряных знаков306 бронзовых знаков
7
Создание и подсчет рандомного списка
import random
array = []
for i in range(100):
b = random.randrange(1, 1000)
if b % 2 == 1:
array.append(b)
print(len(array))
# 56 в зависимости от рандома
Создание и подсчет чисел от 1 до 100
a = [i for i in range(100) if i % 2 == 1]
print(len(a), a)
# 50
Update
def count_array(count):
a = [i for i in count if i % 2 == 1]
return a
def create_array():
import random
length_array = int(input("Введите колво чисел от 0 до 50:"))
array = []
for i in range(length_array):
array.append(random.randint(0, 50))
return count_array(array)
print(len(create_array()))
ответ дан 8 апр 2018 в 16:27
TwissTwiss
6,3434 золотых знака24 серебряных знака53 бронзовых знака
9
Возможный такой подяод:
- Сделайте новый массив (список) только из нечетных чисел первоначального.
- Используйте функцию
len()
.
Код может выглядать так:
new_list = [element for element in orig_list if element % 2 == 1]
necetnych = len(new_list)
Результат оперетор %
(модуло) – это остаток по делении первого оператора вторым, и так когда остаток по делении двумя будет 1
, первый оператор должен быть
нечетный.
ответ дан 8 апр 2018 в 16:34
MarianDMarianD
14.1k3 золотых знака18 серебряных знаков29 бронзовых знаков
2