Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2012 23:43:53

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Индекс в списке

fata1ex
paraman, возьмите любой учебник и прочитайте хотя бы первые пару сотен страниц. Лутц, Саммерфилд, Пилгрим. Это абсолютная база, которая расписана людьми специально для обучения. Без её понимания далеко не уйти.

Фразы вроде
paraman
мы преобразуем массив kgs в int и производим сравнение. Как же он потом вытаскивает индексы, да ещё и потом вытаскивает значения из других массивов с теми же индексами.
выдают, что вы этой базой не владеете, а значит нужно её приобретать.
.

Вы крутой телепат. Я вообще не программист. Полторы недели назад осознал, что мне нужно познать программирование на питоне. Скачал книгу Саммерфилд - Программирование на Python 3.2009
Прочитал 90 страниц и не удержался начал кодить. Только прошу воздержаться от жёсткой критики, что нужно было дочитать до конца. Очень хотелось начать. Что-нибудь скажите про эту книгу или посоветуете другую?

Насчет удаления. Мне интересно, как в данном примере можно сократить портянку из удаления переменных из списка.

Офлайн

#2 Июль 15, 2012 00:06:10

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Индекс в списке

paraman, для начала подойдёт очень даже. Кодить никак не мешает тратить вечером по часу перед сном, чтобы за неделю-другую овладеть основами. Жесткой критики здесь нет, просто советы.

Насчет удаления. Я вообще не понимаю, зачем вам что-то удалять :) Ладно бы ещё вы после list.index удаляли элемент, чтобы он не попал в область следующего поиска, но здесь-то зачем.



Офлайн

#3 Июль 15, 2012 00:23:19

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Индекс в списке

fata1ex
paraman, для начала подойдёт очень даже. Кодить никак не мешает тратить вечером по часу перед сном, чтобы за неделю-другую овладеть основами. Жесткой критики здесь нет, просто советы.

Насчет удаления. Я вообще не понимаю, зачем вам что-то удалять Ладно бы ещё вы после list.index удаляли элемент, чтобы он не попал в область следующего поиска, но здесь-то зачем.

В жизни не зачем, в теории нужно. Хочу понять, как можно сократить такую портянку.

Офлайн

#4 Июль 15, 2012 00:35:39

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Индекс в списке

Если честно, я не примомню, чтобы в жизни использовал remove. Это, как минимум, неэффективно, а зачастую (по-моему) говорит о неправильном подходе к решению. Максимум - pop. Да и сокращать тут нечего. И, кажется, я вам уже писал, что не нужно стремиться к сокращению кода, нужно стремиться к его упрощению. То что привёл Ed, написано just for fun, не более. Подобным образом можно записать очень многое, но если вы так будете писать не в выходные в треде для новичков, а в будние на работе, то никто вас по голове не погладит.

a, b, c = [], [], []
a = b = c = []



Отредактировано fata1ex (Июль 15, 2012 00:42:25)

Офлайн

#5 Июль 15, 2012 00:39:17

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Индекс в списке

fata1ex
Если честно, я не примомню, чтобы в жизни использовал remove. Это, как минимум, неэффективно, а зачастую (по-моему) говорит о неправильном подходе к решению. Максимум - pop. Да и сокращать тут нечего.

a, b, c = []. []. []
a = b = c = []


Спасибо Вам за всё. Вы очень крутой.

Отредактировано paraman (Июль 15, 2012 01:09:25)

Офлайн

#6 Июль 15, 2012 01:48:09

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Индекс в списке

А на тему .remove?

Офлайн

#7 Июль 15, 2012 04:02:28

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Индекс в списке

Ну, можно фильтровать:

new_fruits = [element for element in fruits if element != 'None']
new_fruits2 = filter(lambda element: element != 'None', fruits)

В контексте примера:
def validate((kg, fruit1, fruit2)):
    if 'None' in (fruit1, fruit2):
        return False
    try:
        int(kg)
    except ValueError:
        return False
    return True
new_fruits = filter(lambda triple: validate(triple), zip(kg, fruits, fruits2))
kg, fruits, fruits2 = zip(*new_fruits) # unzip

или вообще другой подход:
weights = {}
new_fruits = {}
for kilo, fruit1, fruit2 in zip(kg, fruits, fruits2):
    try:
        weight = int(kilo)
    except ValueError:
        continue
    if 'None' not in (fruit1, fruit2): 
        weights.setdefault(weight, []).extend((fruit1, fruit2))            
        new_fruits[fruit1] = new_fruits[fruit2] = weight
получаем на выходе вполне приемлемые структуры (в смысле поиска)
>>> weights[13]
['Pineapple', 'Jackfruit', 'Banana', 'Melon; cantaloupe']
>>> weights[10]
['Apricot', 'Grapefruit', 'Grape', 'Kaffir lime']
>>> new_fruits['Apricot']
10
>>> new_fruits['Fig']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'Fig'
>>> new_fruits['Quince']
6
>>>
>>> for w, fruits in weights.items():
...   if 5 <= w <= 7:
...     print w, fruits
... 
6 ['Quince', 'Guava'] 
вообще по поводу оптимизации - правильно подобранная структура данных + соответсвующие алгоритмы рулят

Отредактировано EBFE (Июль 15, 2012 04:05:51)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version