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

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

Пример:

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

Ответ 1

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

Здесь:

 [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]

Update:

Хорошо, вам нужно выражение генератора, у нас будет выражение генератора. Здесь повторное понимание списка, в цикле 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.

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

for i in xrange(len(testlist)):
  if testlist[i] == 1:
    print i

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

Ответ 5

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

try:
   id = testlist.index('1')
   print testlist[id]
except ValueError:
   print "Not Found"

Ответ 6

[x for x in range(len(testlist)) if testlist[x]==1]

Ответ 7

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

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

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

Ответ 8

Попробуйте ниже:

testlist = [1,2,3,5,3,1,2,1,6]    
position=0
for i in testlist:
   if i == 1:
      print(position)
   position=position+1

Ответ 9

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

from Tkinter import * 
listbox.curselection()

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

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

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

Что для первой позиции, и число изменится в соответствии с позицией позиции.

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

Привет.

Ответ 10

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

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

Ответ 11

WRONGWRONGWRONGWRONGWRONGWRONGWRONGWRONGWRONGWRONG

Ответ 12

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

Я предполагаю, что это то, чего вы хотите.;-) "id" всегда будет индексом значений в списке.