Уведомления

Группа в Telegram: @pythonsu

#1 Май 23, 2014 12:36:35

Tolmavasya
Зарегистрирован: 2014-05-21
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Где ошибка?

Мне нужно преобразовать массив таким образом что бы сначала шли все числа принадлежащие промежутку от a до b,включительно, а потом все остальные. Желательно без использования функций Numpy

import numpy as np 
x=np.array([8,34,-5,41,8,43,9,47,7,-4,8,37,11]) 
def preobraz(x):
    a=-5
    b=8
    for i in range(len(x)-1):
        for j in range(len(x)-1):
            if a<=x[i]<=b:
                buf=x[j]
                x[j]=x[j+1]
                x[j+1]=buf
    return x
Результат 8 43 -5 41 9 47 7 -4 8 34 37 11 8
а должно быть 8 -5 8 7 -4 8 34 41 43 9 47 37 11

Отредактировано Tolmavasya (Май 23, 2014 12:47:58)

Офлайн

#2 Май 23, 2014 12:54:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Где ошибка?

l = [8, 34, -5, 41, 8, 43, 9, 47, 7, -4, 8, 37, 11]
lrange = xrange(-5, 8 + 1)
print filter(lambda x: x in lrange, l) + filter(lambda x: x not in lrange, l)



Офлайн

#3 Май 23, 2014 16:08:22

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Где ошибка?

def change_lst(lst, x0, x1):
    n = len(lst)
    i = 0
    while i < n:
        if not x0 <= lst[i] <= x1:
            lst.append(lst.pop(i))
            n -= 1
        else:
            i += 1
    return lst



Офлайн

#4 Май 23, 2014 17:11:09

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Где ошибка?

from random import randint
from timeit import Timer
lst = [randint(-100, 100) for x in xrange(1000)]
def change_lst(lst, x0, x1):
    n = len(lst)
    i = 0
    while i < n:
        if not x0 <= lst[i] <= x1:
            lst.append(lst.pop(i))
            n -= 1
        else:
            i += 1
def change_lst_1(l, x0, x1):
    lrange = xrange(x0, x1 + 1)
    filter(lambda x: x in lrange, l) + filter(lambda x: x not in lrange, l)
print(
    Timer(
        'change_lst(lst, -25, 25)',
        'from __main__ import change_lst, lst',
    ).repeat(number=500)
)
print(
    Timer(
        'change_lst_1(lst, -25, 25)',
        'from __main__ import change_lst_1, lst',
    ).repeat(number=500)
)

[0.19870996475219727, 0.19606900215148926, 0.19738388061523438]
[1.1597800254821777, 1.1518549919128418, 1.1524171829223633]

lst = [randint(-100, 100) for x in xrange(5000)]
[1.9120218753814697, 1.8795349597930908, 1.8031980991363525]
[5.685834169387817, 5.6973559856414795, 5.67763090133667]

lst = [randint(-100, 100) for x in xrange(10000)]
[8.914979934692383, 8.927042007446289, 9.021567106246948]
[11.451546907424927, 11.313754081726074, 11.619380950927734]

lst = [randint(-100, 100) for x in xrange(15000)]
[18.895700931549072, 18.775031089782715, 18.790196895599365]
[17.054412841796875, 17.187416076660156, 17.212937116622925]

lst = [randint(-100, 100) for x in xrange(20000)]
[32.833192110061646, 32.811413049697876, 33.04986381530762]
[23.030756950378418, 23.137761116027832, 22.968353033065796]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version