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
.
нужно подсчитать количество нечетных чисел в массиве.Делать за меня прогамму не надо.Только навести на мысль.
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,3234 золотых знака24 серебряных знака52 бронзовых знака
задан 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,3234 золотых знака24 серебряных знака52 бронзовых знака
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
0 / 0 / 0 Регистрация: 09.04.2018 Сообщений: 4 |
|
1 |
|
Найти количество нечётных элементов массива09.04.2018, 16:20. Показов 13092. Ответов 6
Дан массив из n элементов. Необходимо найти количество нечётных элементов массива. Формат входных данных Формат выходных данных Примеры
0 |
4466 / 3146 / 1112 Регистрация: 21.03.2016 Сообщений: 7,832 |
|
09.04.2018, 19:31 |
2 |
а цикл for, условие if и как прибавлять 1 к начальной переменной счетсчика вам уже знакомо?
0 |
0 / 0 / 0 Регистрация: 09.04.2018 Сообщений: 4 |
|
09.04.2018, 20:06 [ТС] |
3 |
нет
0 |
4466 / 3146 / 1112 Регистрация: 21.03.2016 Сообщений: 7,832 |
|
09.04.2018, 20:23 |
4 |
ну так изучайте а потом пытайтесь решить задачу в которой без циклов и условий никак.
0 |
0 / 0 / 0 Регистрация: 09.04.2018 Сообщений: 4 |
|
09.04.2018, 20:33 [ТС] |
5 |
Можете просто решение написать?
0 |
ioprst 1303 / 843 / 409 Регистрация: 12.03.2018 Сообщений: 2,305 |
||||
09.04.2018, 20:36 |
6 |
|||
0 |
0 / 0 / 0 Регистрация: 09.04.2018 Сообщений: 4 |
|
09.04.2018, 20:37 [ТС] |
7 |
Спасибо
0 |
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
,
Учитывая массив, содержащий элементы от 0 до 31, найдите элементы, которые встречаются нечетное количество раз, не используя дополнительное пространство.
Например,
Input: nums[] = [5, 8, 2, 5, 8, 2, 8, 5, 1, 8, 2]
Output: The odd occurring elements are 5, 2, and 1
Explanation:
1 occurs once.
2 and 5 occurs thrice.
8 occurs four times.
Потренируйтесь в этой проблеме
Простым решением было бы хранить частоты элементов массива в массиве счетчиков или карте и печатать элементы с нечетными частотами. Преимущество этого подхода в том, что он может работать с любым диапазоном входных данных за линейное время, но требует дополнительного места.
Чтобы решить эту проблему в линейном времени и постоянном пространстве, используйте побитовый оператор XOR. Мы знаем, что результат операции XOR равен 0, если и первый, и второй бит равны 0 или оба равны 1, и результат равен 1, только если только первый бит равен 1 или только второй бит равен 1.
Для иллюстрации рассмотрим входной массив nums[] = { 5, 8, 2, 5, 8, 2, 8, 5, 1, 8, 2 }
. Если мы рассмотрим каждый элемент массива, сдвинем вправо 1 на его значение и возьмем XOR всех результатов, мы получим 00000000 00000000 00000000 00100110
.
Каждый 1 в i'th
индекс справа представляет нечетное вхождение элемента i
в массиве. Каждый 0 в i'th
индекс справа показывает четность или отсутствие элемента i
в массиве. Нечетные встречающиеся элементы — это 1, 2 и 5, поскольку 1 занимает 1-ю, 2-ю и 5-ю позиции.
Алгоритм может быть реализован следующим образом на 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 23 24 25 26 27 28 29 30 |
#include <stdio.h> // Находим нечетные элементы в заданном массиве void findRepeating(int nums[], int n) { int xor = 0; for (int i = 0; i < n; i++) { xor ^= (1 << nums[i]); } printf(“The odd occurring elements are “); for (int i = 0; i < n; i++) { if (xor & (1 << nums[i])) { printf(“%d “, nums[i]); xor ^= (1 << nums[i]); // чтобы не печатать дубликаты } } } int main(void) { int nums[] = { 5, 8, 2, 5, 8, 2, 8, 5, 1, 8, 2 }; int n = sizeof(nums) / sizeof(nums[0]); findRepeating(nums, n); return 0; } |
Скачать Выполнить код
результат:
The odd occurring elements are 5 2 1
Java
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 |
class Main { // Находим нечетные элементы в заданном массиве public static void findRepeating(int[] nums) { int xor = 0; for (int i: nums) { xor ^= (1 << i); } System.out.print(“The odd occurring elements are “); for (int i: nums) { if ((xor & (1 << i)) != 0) { System.out.print(i + ” “); xor ^= (1 << i); // чтобы не печатать дубликаты } } } public static void main(String[] args) { int[] nums = { 5, 8, 2, 5, 8, 2, 8, 5, 1, 8, 2 }; findRepeating(nums); } } |
Скачать Выполнить код
результат:
The odd occurring elements are 5 2 1
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Найти нечетные элементы в заданном списке def findRepeating(nums): xor = 0 for i in nums: xor ^= (1 << i) print(‘The odd occurring elements are ‘, end=”) for i in nums: if xor & (1 << i): print(i, end=‘ ‘) xor ^= (1 << i) #, чтобы не печатать дубликаты if __name__ == ‘__main__’: nums = [5, 8, 2, 5, 8, 2, 8, 5, 1, 8, 2] findRepeating(nums) |
Скачать Выполнить код
результат:
The odd occurring elements are 5 2 1
Упражнение:
1. Расширьте решение для поиска четных элементов.
2. Расширьте решение для обработки диапазона от 0 до 63.
Автор: Адитья Гоэль