Как найти нечетные числа в массиве питон

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's user avatar

Twiss

6,3234 золотых знака24 серебряных знака52 бронзовых знака

задан 8 апр 2018 в 16:19

Egor's user avatar

1

Чтобы найти сколько чисел нечётные в заданной коллекции:

odd_count = sum(1 for n in numbers if n & 1)

ответ дан 8 апр 2018 в 21:07

jfs's user avatar

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

Twiss's user avatar

TwissTwiss

6,3234 золотых знака24 серебряных знака52 бронзовых знака

9

Возможный такой подяод:

  1. Сделайте новый массив (список) только из нечетных чисел первоначального.
  2. Используйте функцию len().

Код может выглядать так:

new_list = [element for element in orig_list if element % 2 == 1]
necetnych = len(new_list)

Результат оперетор % (модуло) – это остаток по делении первого оператора вторым, и так когда остаток по делении двумя будет 1, первый оператор должен быть
нечетный.

ответ дан 8 апр 2018 в 16:34

MarianD's user avatar

MarianDMarianD

14.1k3 золотых знака18 серебряных знаков29 бронзовых знаков

2

0 / 0 / 0

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

Сообщений: 4

1

Найти количество нечётных элементов массива

09.04.2018, 16:20. Показов 13092. Ответов 6


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

Дан массив из n элементов. Необходимо найти количество нечётных элементов массива.

Формат входных данных
С клавиатуры вводится натуральное число n (n≤100). На следующей строке через пробел вводятся n элементов массива. Все числа по модулю не превосходят 100.

Формат выходных данных
В качестве ответа выведите единственное число — количество нечётных элементов массива.

Примеры
входные данные выходные данные
6
1 2 3 4 4 1
3



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

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
n = int(input())
if n > 100:
    exit('n > 100')
array = []
for i in range(n):
    a = int(input())
    if abs(a) > 100:
        exit('|{}| > 100'.format(a))
    array.append(a)
cnt = 0
for a in array:
    if a%2 != 0:
        cnt += 1
print(cnt)



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.

 
Автор: Адитья Гоэль

Добавить комментарий