Как получить позицию позиции в списке?

Я повторяю список, и я хочу распечатать индекс элемента, если он удовлетворяет определенному условию. Как мне это сделать?

Пример:

testlist = [1,2,3,5,3,1,2,1,6] for item in testlist: if item == 1: print position 

10 Solutions collect form web for “Как получить позицию позиции в списке?”

Хммм. Здесь был ответ со списком, но он исчез.

Вот:

  [i for i,x in enumerate(testlist) if x == 1] 

Пример:

 >>> testlist [1, 2, 3, 5, 3, 1, 2, 1, 6] >>> [i for i,x in enumerate(testlist) if x == 1] [0, 5, 7] 

Обновить:

Хорошо, вам нужно выражение генератора, у нас будет выражение генератора. Ниже приведено описание списка в цикле for:

 >>> for i in [i for i,x in enumerate(testlist) if x == 1]: ... print i ... 0 5 7 

Теперь мы построим генератор …

 >>> (i for i,x in enumerate(testlist) if x == 1) <generator object at 0x6b508> >>> for i in (i for i,x in enumerate(testlist) if x == 1): ... print i ... 0 5 7 

и достаточно удобно, мы можем назначить это переменной и использовать ее оттуда …

 >>> gen = (i for i,x in enumerate(testlist) if x == 1) >>> for i in gen: print i ... 0 5 7 

И думать, что я писал FORTRAN.

Как насчет следующего?

 print testlist.index(element) 

Если вы не уверены, действительно ли элемент для поиска находится в списке, вы можете добавить предварительную проверку, например

 if element in testlist: print testlist.index(element) 

или

 print(testlist.index(element) if element in testlist else None) 

или «pythonic way», что мне не очень нравится, потому что код менее ясен, но иногда более эффективен,

 try: print testlist.index(element) except ValueError: pass 

Использовать перечисление:

 testlist = [1,2,3,5,3,1,2,1,6] for position, item in enumerate(testlist): if item == 1: print position 
 for i in xrange(len(testlist)): if testlist[i] == 1: print i 

xrange вместо диапазона в соответствии с запросом (см. комментарии).

Вот еще один способ сделать это:

 try: id = testlist.index('1') print testlist[id] except: print "Not Found" 
 [x for x in range(len(testlist)) if testlist[x]==1] 

Если ваш список достаточно велик, и вы только ожидали найти значение в разреженном числе индексов, подумайте, что этот код может выполняться намного быстрее, потому что вам не нужно перебирать каждое значение в списке.

 lookingFor = 1 i = 0 index = 0 try: while i < len(testlist): index = testlist.index(lookingFor,i) i = index + 1 print index except ValueError: #testlist.index() cannot find lookingFor pass 

Если вы ожидаете найти значение много, вы должны просто добавить «индекс» в список и распечатать список в конце, чтобы сэкономить время на итерацию.

Я думаю, что было бы полезно использовать метод curselection () из библиотеки Tkinter:

 from Tkinter import * listbox.curselection() 

Этот метод работает с виджетами Tkinter listbox, поэтому вам нужно будет создать один из них вместо списка.

Это вернет такую ​​позицию:

('0',) (хотя более поздние версии Tkinter могут вместо этого возвращать список int)

Это для первой позиции, и число будет меняться в соответствии с позицией позиции.

Для получения дополнительной информации см. Эту страницу: http://effbot.org/tkinterbook/listbox.htm

Приветствую.

Зачем усложнять вещи?

 testlist = [1,2,3,5,3,1,2,1,6] for position, item in enumerate(testlist): if item == 1: print position 
 testlist = [1,2,3,5,3,1,2,1,6] for id, value in enumerate(testlist): if id == 1: print testlist[id] 

Наверное, это то, чего ты хочешь. 😉 'id' всегда будет индексом значений в списке.

  • Список копий не работает?
  • Python 2: AttributeError: объект 'list' не имеет атрибута 'strip'
  • Python - удаление перекрывающихся списков
  • Найти сумму подмножеств списка в python
  • Перемеживающие списки в Python
  • Выберите 5 различных элементов из списка?
  • Python: добавьте элемент в список, пока не будет выполнено условие
  • Есть ли способ использовать два условия if в списках в python
  • Python - лучший язык программирования в мире.