Найти - Пользователи
Полная версия: Индекс в списке
Начало » Python для новичков » Индекс в списке
1 2 3
paraman
Изучая мануал http://docs.python.org/release/3.1.5/tutorial/datastructures.html
Обнаружил хрень.
a = [66.25, 333, 333, 1, 1234.5]
a.index(333)
1

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

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

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

Но возможно Вы хотите не этого. Для более правильного совета необходимо понимать общую задачу.
paraman
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
sanodin
Может это http://python.su/forum/topic/15055/
paraman
sanodin
Может это http://python.su/forum/topic/15055/

Под пример не понял, как использовать.
sanodin
paraman
sanodin
Может это http://python.su/forum/topic/15055/

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

Значит я не понял Ваше
достать индекс второго числа 333
paraman
sanodin
paraman
sanodin
Может это http://python.su/forum/topic/15055/

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

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

А по примеру, есть мысли, как достать и вывести на печать?
fata1ex
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.
odnochlen
fata1ex
except: pass

Так писать нельзя.
Нельзя-то нельзя, но не подскажешь ли, как получить список всех возможных исключений, которые может бросить код?
Ed
И я хочу поучаствовать в конкурсе телепатов. Претендую на первое место :)
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB