Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2012 23:21:49

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

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

Изучая мануал http://docs.python.org/release/3.1.5/tutorial/datastructures.html
Обнаружил хрень.

a = [66.25, 333, 333, 1, 1234.5]
a.index(333)
1

Получается, что вообще ни как не достать индекс второго числа 333 или же есть какое заклинание?

Офлайн

#2 Июль 13, 2012 23:50:59

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

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

paraman
Получается, что вообще ни как не достать индекс второго числа 333 или же есть какое заклинание?

Заклинание называется google и документация. Еще голова и ровные руки. Пропорции подбирать по вкусу.

a = [66.25, 333, 333, 1, 1234.5]
[i for i, n in enumerate(a) if n == 33]

Но возможно Вы хотите не этого. Для более правильного совета необходимо понимать общую задачу.



Отредактировано cutwater (Июль 13, 2012 23:51:55)

Офлайн

#3 Июль 14, 2012 09:36:33

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

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

cutwater
paraman
Получается, что вообще ни как не достать индекс второго числа 333 или же есть какое заклинание?

Заклинание называется google и документация. Еще голова и ровные руки. Пропорции подбирать по вкусу.

a = [66.25, 333, 333, 1, 1234.5]
[i for i, n in enumerate(a) if n == 33]

Но возможно Вы хотите не этого. Для более правильного совета необходимо понимать общую задачу.

Как пример:

fruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate']
fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi']
kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4']
for f in kg:
  try:
    assert int(f)>=5
    i = kg.index(f)
    print 'kg:', f, fruits[i],'and',fruits2[i]
  except: pass

Выдаёт
kg: 10 Apricot and Grapefruit
kg: 10 Apricot and Grapefruit
kg: 6 Quince and Guava
kg: 13 Pineapple and Jackfruit
kg: 13 Pineapple and Jackfruit
kg: 10 Apricot and Grapefruit

Офлайн

#4 Июль 14, 2012 10:24:01

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

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

Офлайн

#5 Июль 14, 2012 10:43:09

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

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

sanodin
Может это http://python.su/forum/topic/15055/

Под пример не понял, как использовать.

Офлайн

#6 Июль 14, 2012 10:59:37

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

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

paraman
sanodin
Может это http://python.su/forum/topic/15055/

Под пример не понял, как использовать.

Значит я не понял Ваше
достать индекс второго числа 333

Офлайн

#7 Июль 14, 2012 11:08:51

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

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

sanodin
paraman
sanodin
Может это http://python.su/forum/topic/15055/

Под пример не понял, как использовать.

Значит я не понял Ваше
достать индекс второго числа 333

А по примеру, есть мысли, как достать и вывести на печать?

Офлайн

#8 Июль 14, 2012 11:51:54

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

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

paraman, если вы думаете, что увидев ваш код, мы все сразу поймем, что вам нужно, то вы ошибаетесь. Опишите нормально, что вам нужно. Что на входе и что вы хотите получить на выходе.

Есть замечательная функция enumerate, которую вы проигнорировали. Кажется, она должна помочь.
Так же, чтобы найти k-ое вхождение вхождения элемента elem в список можно сделать что-нибудь в этом роде:

>>> my_list = [1, 2, 3] * 10
>>> def find_index(my_list, elem, occurrence_num=1):
...     current_idx = -1
...     for occurrence in xrange(occurrence_num):
...         current_idx = my_list.index(elem, current_idx + 1)
...
...     return current_idx
...     
... 
>>> 
>>> find_index(my_list, 1, 3)
6
>>> find_index(my_list, 1, 4)
9
>>> find_index(my_list, 1, 5)
12
>>> find_index(my_list, 2, 5)
13
>>> find_index(my_list, 2, 4)
10
>>> find_index(my_list, 2, 3)
7
Это стандартный паттерн, когда мы запоминаем предыдущее вхождение элемента и ищем в списке, который лежит после этого вхождения. В большинстве случаев это не нужно.

for f in kg:
    i = kg.index(f)
Вам не показалось странным, что вы идёте по списку и в цикле ещё и ищете, где вы идёте? Можно вручную прибавлять текущий индекс, можно использовать enumerate.

except: pass
Так писать нельзя.

assert
Зачем вам здесь блок assert-try-except, если можно обойтись обычным if?

print 'kg:', f, fruits[i],'and',fruits2[i]
Ну а для таких вещей есть функция str.format.



Отредактировано fata1ex (Июль 14, 2012 12:53:30)

Офлайн

#9 Июль 14, 2012 12:59:41

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

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

fata1ex
except: pass

Так писать нельзя.
Нельзя-то нельзя, но не подскажешь ли, как получить список всех возможных исключений, которые может бросить код?

Офлайн

#10 Июль 14, 2012 16:00:20

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

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

И я хочу поучаствовать в конкурсе телепатов. Претендую на первое место :)

fruits = ['Apricot', 'Avocado', 'Pawpaw', 'Quince', 'Pineapple', 'Orange', 'Banana', 'Bergamot', 'Grape', 'Cherry', 'Pomegranate']
fruits2 = ['Grapefruit', 'Pear', 'fruits', 'Guava', 'Jackfruit', 'Durian', 'Melon; cantaloupe', 'Fig' 'Calamondin', 'Kaffir lime', 'Cashew', 'Kiwi']
kg = ['10','4','10','6','13','1','13','36:7','10','20:10', '4']
for kgs, fr1, fr2 in zip(kg, fruits, fruits2):
    try:
        if int(kgs) >= 5:
            print 'kg:', kgs, fr1, 'and', fr2
    except ValueError:
        continue



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version