Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/107: Рейтинг темы: голосов - 107, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 3

Из массив числовых значений исключить все нулевые элементы.

28.02.2012, 14:08. Показов 22243. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
N = input(u"N=")
Massiv = [input(u"Massiv=") for i in range(N)]
for i in range(N):
    if Massiv[i] == 0:
        del Massiv[i]
print Massiv
объясните, пожалуйста, что не так, если не затруднит
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2012, 14:08
Ответы с готовыми решениями:

Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить из массива элементы, принадлежащие промежутку [В;С]
Пожалуйста, помогите бедному студенту, в тяжкие времена зачетной недели: 1. Дано действительное число А. Вычислить f(A), если f(x)=0...

Дан одномерный массив числовых значений из N элементов. Исключить все нулевые элементы
Дан одномерный массив числовых значений из N элементов. Исключить все нулевые элементы.

Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить из массива элементы, принадлежащие промежу
Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить из массива элементы, принадлежащие промежутку

13
104 / 94 / 14
Регистрация: 20.06.2010
Сообщений: 966
Записей в блоге: 16
28.02.2012, 14:46
Цитата Сообщение от NikoTrend1 Посмотреть сообщение
объясните, пожалуйста, что не так, если не затруднит
У вас выход за рамки массива

Добавлено через 2 минуты
Можно сделать вот так:
Python
1
2
3
4
N = input("N=")
Massiv = [i for i in range(N)]
Massiv = [x for x in filter(lambda i: i != 0, Massiv)]
print Massiv
1
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 3
28.02.2012, 15:15  [ТС]
извиняюсь, за неправильно поставленный вопрос. Я хотел как раз понять почему выход за рамки массива?
0
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 20
28.02.2012, 16:28
Python
1
2
3
4
5
6
N = input(u"N=")
Massiv = [input(u"Massiv=") for i in range(N)]
for i in range(N-1):#поскольку диапазон чисел формируемых функцией range(),начинается с "0",то верхней границей должно быть (N-1)
    if Massiv[i] == 0:
        del Massiv[i]
print Massiv
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.02.2012, 16:35
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от bodrich Посмотреть сообщение
Massiv = [x for x in filter(lambda i: i != 0, Massiv)]
Python
1
2
Massiv = filter(lambda i: i != 0, Massiv)
# или Massiv = list(filter(lambda i: i != 0, Massiv)) в Python3
NikoTrend1, input использовать во втором питоне — плохо!
3
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
28.02.2012, 17:20
Цитата Сообщение от Михаил27 Посмотреть сообщение
for i in range(N-1):#поскольку диапазон чисел формируемых функцией range(),начинается с "0",то верхней границей должно быть (N-1)
нет, выход за границы массива будет не из-за этого (т.к. range возвращает список/итератор с элементами от 0 до N-1). Выход происходит из-за того, что внутри цикла происходит удаление элементов массива, соответственно, его размер уменьшается (а индексы существующих элементов «сдвигаются»), в то время как диапазон range остается неизменным.
1
0 / 0 / 0
Регистрация: 27.02.2012
Сообщений: 20
28.02.2012, 17:30
Python
1
2
3
4
5
6
7
N = input("N=")
Massiv = [input("Massiv=")for i in range(N)]#формируем список с єлементов массива
Massiv = filter(lambda i:i!=0,Massiv)#функция filter() вызывает lambda функцию
                                     #для каждого элемента списка и возвращает
                                     #новый список, который содержит только те
                                     #элементы для которых функция возвращает “true”.  
print Massiv
Всем Спасибо огромное!
0
0 / 0 / 0
Регистрация: 28.02.2012
Сообщений: 3
28.02.2012, 21:06  [ТС]
Михаил27, вот, ещё кому-то пригодился мой вопрос. Спасибо большое, очень ценный форум
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
29.02.2012, 05:19
вот так:
Python
1
massiv = [x for x in massiv if x]
будет раза в два-два с половиной быстрее чем:
Python
1
massiv = list(filter(lambda i: i != 0, massiv))
а так:
Python
1
massiv = list(filter(bool, massiv))
и еще быстрее
2
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2012, 01:37
Python
1
2
3
4
5
6
7
>>> lst = [1, 2, 0, 3, 4, 0, 6, 7, 0]
>>> while 0 in lst:
...     lst.remove(0)
... 
>>> lst
[1, 2, 3, 4, 6, 7]
>>>
Python
1
2
3
4
>>> lst = [1, 2, 0, 3, 4, 0, 6, 7, 0]
>>> filter(lambda i: i, lst)
[1, 2, 3, 4, 6, 7]
>>>
Добавлено через 19 часов 0 минут
проверил по скорости через timeit
цикл оказался немного быстрее фильтра

думал ускорить цикл
Python
1
2
3
4
5
    try:
        while True:
            del lst[lst.index(0)]
    except ValueError:
        pass
так этот оказался очень медленным, хотя кажется, что в нём один проход всего
1
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
01.03.2012, 04:12
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import timeit
 
if "__main__" == __name__:
    massiv = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    t1 = timeit.Timer("list(filter(lambda i: i != 0, massiv))", "from __main__ import massiv")
    t2 = timeit.Timer("list(filter(lambda i: i, massiv))", "from __main__ import massiv")
    t3 = timeit.Timer("[x for x in massiv if x]", "from __main__ import massiv")
    t4 = timeit.Timer("list(filter(bool, massiv))", "from __main__ import massiv")
    t5 = timeit.Timer("while 0 in massiv: massiv.remove(0)", "from __main__ import massiv")
 
    print(t1.timeit())
    print(t2.timeit())
    print(t3.timeit())
    print(t4.timeit())
    print(t5.timeit())
 
# результат
4.03785138893351
3.6912919100053223
1.7922205196470502
1.4422745767967715
0.2727966822598962
Последней цифрой можно не впечатляться, потому как удаление происходит всего один раз, а остальные 999999 раз просто проверяется отсутствие значения 0 в списке
К чему это все? К тому что применительно к map, filter, reduce и т.д и т.п. lambda - зло.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2012, 06:08
в 3.2.2
Python
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
>>> def f1():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     while 0 in lst:
...         lst.remove(0)
... 
>>> 
>>> def f2():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = filter(lambda i: i, lst)
... 
>>> 
>>> def f3():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = list(filter(lambda i: i, lst))
... 
>>> 
>>> import timeit
>>> t1 = timeit.Timer('f1()', 'from __main__ import f1')
>>> t2 = timeit.Timer('f2()', 'from __main__ import f2')
>>> t3 = timeit.Timer('f3()', 'from __main__ import f3')
>>> t1.repeat(5, 2000000)
[2.1868231296539307, 2.1641170978546143, 2.160362958908081, 2.161345958709717, 2.1860971450805664]
>>> t2.repeat(5, 2000000)
[0.8930799961090088, 0.8885161876678467, 0.8892738819122314, 0.8894810676574707, 0.8898909091949463]
>>> t3.repeat(5, 2000000)
[4.382528066635132, 4.374891996383667, 4.3801109790802, 4.384387969970703, 4.3769309520721436]
>>>

в 2.7.2
Python
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
>>> def f1():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     while 0 in lst:
...         lst.remove(0)
... 
>>> 
>>> def f2():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = filter(lambda i: i, lst)
... 
>>> 
>>> def f3():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = list(filter(lambda i: i, lst))
... 
>>> 
>>> import timeit
>>> t1 = timeit.Timer('f1()', 'from __main__ import f1')
>>> t2 = timeit.Timer('f2()', 'from __main__ import f2')
>>> t3 = timeit.Timer('f3()', 'from __main__ import f3')
>>> t1.repeat(5, 2000000)
[2.747403144836426, 2.7279930114746094, 2.732720136642456, 2.7263519763946533, 2.7324111461639404]
>>> t2.repeat(5, 2000000)
[2.6311988830566406, 2.6145389080047607, 2.611593008041382, 2.613178014755249, 2.608211040496826]
>>> t3.repeat(5, 2000000)
[3.1140201091766357, 3.099252939224243, 3.097136974334717, 3.0949201583862305, 3.098599910736084]
>>>

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

Добавлено через 32 секунды
Цитата Сообщение от pyuser Посмотреть сообщение
К тому что применительно к map, filter, reduce и т.д и т.п. lambda - зло.
это почему, чем она отличается от любой другой функции ?
в 3.2.2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> def f1():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = filter(lambda i: i, lst)
... 
>>> 
>>> def f2():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     f = lambda i: i
...     lst = filter(f, lst)
... 
>>> 
>>> import timeit
>>> t1 = timeit.Timer('f1()', 'from __main__ import f1')
>>> t2 = timeit.Timer('f2()', 'from __main__ import f2')
>>> t1.repeat(5, 2000000)
[0.8781790733337402, 0.8558759689331055, 0.855961799621582, 0.8574540615081787, 0.8547971248626709]
>>> t2.repeat(5, 2000000)
[0.925865888595581, 0.9157328605651855, 0.9148991107940674, 0.9083690643310547, 0.9189949035644531]
>>>

в 2.7.2
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> def f1():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     lst = filter(lambda i: i, lst)
... 
>>> 
>>> def f2():
...     lst = [0, 1, 0, 2, 0, 3, 0]
...     f = lambda i: i
...     lst = filter(f, lst)
... 
>>> 
>>> import timeit
>>> t1 = timeit.Timer('f1()', 'from __main__ import f1')
>>> t2 = timeit.Timer('f2()', 'from __main__ import f2')
>>> t1.repeat(5, 2000000)
[2.746462821960449, 2.7367570400238037, 2.736837863922119, 2.735177993774414, 2.7364919185638428]
>>> t2.repeat(5, 2000000)
[2.8042149543762207, 2.804452896118164, 2.8055648803710938, 2.8038151264190674, 2.810389995574951]
>>>
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
01.03.2012, 07:00
3.2.2
Python
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
import timeit
 
def f1():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = list(filter(lambda i: i != 0, lst))
 
def f2():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = list(filter(lambda i: i, lst))
 
def f3():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = [x for x in lst if x]
 
def f4():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = list(filter(bool, lst))
 
def f5():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    while 0 in lst:
        lst.remove(0)
 
if "__main__" == __name__:
    t1 = timeit.Timer("f1()", "from __main__ import f1")
    t2 = timeit.Timer("f2()", "from __main__ import f2")
    t3 = timeit.Timer("f3()", "from __main__ import f3")
    t4 = timeit.Timer("f4()", "from __main__ import f4")
    t5 = timeit.Timer("f5()", "from __main__ import f5")
 
    print(t1.repeat(5))
    print(t2.repeat(5))
    print(t3.repeat(5))
    print(t4.repeat(5))
    print(t5.repeat(5))
результат:
[4.433629902683162, 4.431266124605223, 4.434762239334887, 4.429822714898123, 4.4290299465434835]
[4.158927531292385, 4.166734110061473, 4.151155454114978, 4.156151899193894, 4.15411386083985]
[2.2100820076294596, 2.201466806535471, 2.202594533662797, 2.2032563496198563, 2.19916902846591]
[1.9996699301168164, 1.9988988125585792, 1.9995257777175581, 2.006702877041633, 1.998877720492409]
[2.7012282985686653, 2.7039438671674674, 2.7030073654612607, 2.7018961907169796, 2.70474794980926]

2.7.2
Python
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
import timeit
 
def f1():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = filter(lambda i: i != 0, lst)
 
def f2():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = filter(lambda i: i, lst)
 
def f3():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = [x for x in lst if x]
 
def f4():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    lst = filter(bool, lst)
 
def f5():
    lst = [0, 1, 2, 0, 3, 4, 5, 0, 6, 7, 0, 8, 0, 9]
    while 0 in lst:
        lst.remove(0)
 
if "__main__" == __name__:
    t1 = timeit.Timer("f1()", "from __main__ import f1")
    t2 = timeit.Timer("f2()", "from __main__ import f2")
    t3 = timeit.Timer("f3()", "from __main__ import f3")
    t4 = timeit.Timer("f4()", "from __main__ import f4")
    t5 = timeit.Timer("f5()", "from __main__ import f5")
 
    print(t1.repeat(5))
    print(t2.repeat(5))
    print(t3.repeat(5))
    print(t4.repeat(5))
    print(t5.repeat(5))
результат:
[3.182125521539749, 3.1846959599613918, 3.186127845857504, 3.1807717181932347, 3.181788746893808]
[2.922457463169202, 2.9248322761691803, 2.9293007910223245, 2.92272167272656, 2.9241533490988374]
[2.008943175738814, 2.0306769435780225, 2.0270821431215467, 2.025234980982219, 2.0289198068469574]
[1.4277082003439006, 1.4253541302037007, 1.4262225366631824, 1.4259784413940864, 1.424696574564642]
[3.0065879881381576, 3.0007290731084524, 3.0116745983078843, 3.0128445095675573, 3.0070067564453]

Не по теме:

Радуемся за функцию remove в третьем питоне :)


Да практически в каждом букваре пишут, что применительно к map, filter, reduce и т.д и т.п. применение lambda не рентабельно, лучше пользоваться встроенными функциями (если это возможно, конечно), цифры именно об этом и говорят.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
01.03.2012, 10:52
для 3.2.2
Code
1
2
3
4
5
[3.3781120777130127, 3.372649908065796, 3.367892026901245, 3.3649561405181885, 3.368501901626587]
[2.979408025741577, 2.9938619136810303, 2.9829039573669434, 2.970508098602295, 2.972170829772949]
[1.2458710670471191, 1.2432608604431152, 1.2466320991516113, 1.2443158626556396, 1.2445659637451172]
[1.3631069660186768, 1.3629310131072998, 1.3609118461608887, 1.360713005065918, 1.359184980392456]
[1.9892570972442627, 1.985692024230957, 1.9907338619232178, 1.9866869449615479, 1.9892690181732178]

для 2.7.2
Code
1
2
3
4
5
[2.2540061473846436, 2.3068430423736572, 2.3028430938720703, 2.250349998474121, 2.2451279163360596]
[2.1147079467773438, 2.1094181537628174, 2.1081058979034424, 2.1094841957092285, 2.1090569496154785]
[1.2590408325195312, 1.2776930332183838, 1.2735919952392578, 1.2663419246673584, 1.267894983291626]
[0.9363338947296143, 0.9367589950561523, 0.9370710849761963, 0.9325101375579834, 0.9478399753570557]
[2.4995529651641846, 2.497981071472168, 2.5107169151306152, 2.492464065551758, 2.503059148788452]


Цитата Сообщение от pyuser
лучше пользоваться встроенными функциями
ну, это в данном случае ничего сложного делать не нужно и можно применить bool()
а то, что включение быстро работает, не отменяет занимаемой им памяти
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2012, 10:52
Помогаю со студенческими работами здесь

Исключить все нулевые элементы из массива
23. Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить все нулевые элементы.

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

Исключить из масива все нулевые элементы
Как лучше решить данную задачу? "Дан одномерный массив числовых значений, насчитывающий N элементов. Исключить все нулевые...

Исключить из исходного списка все нулевые элементы до первого отрицательного
Дан список, объектами которого являются целые числа. Размерность списка может быть любой. Исключить из исходного списка все нулевые...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru