Ответы:
Хммм. Здесь был ответ с пониманием списка, но он исчез.
Вот:
[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
И подумать я раньше писал на Фортране.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Затем команда args[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
возвращается'v1'
Как насчет следующего?
print testlist.index(element)
Если вы не уверены, действительно ли искомый элемент находится в списке, вы можете добавить предварительную проверку, например:
if element in testlist:
print testlist.index(element)
или
print(testlist.index(element) if element in testlist else None)
или «питонический путь», который мне не очень нравится, потому что код менее понятен, но иногда более эффективен,
try:
print testlist.index(element)
except ValueError:
pass
ValueError
for i in xrange(len(testlist)):
if testlist[i] == 1:
print i
xrange вместо диапазона, как требуется (см. комментарии).
xrange
развращено в Python 3.x, так как новое range
- староеxrange
Вот еще один способ сделать это:
try:
id = testlist.index('1')
print testlist[id]
except ValueError:
print "Not Found"
[x for x in range(len(testlist)) if testlist[x]==1]
Попробуйте ниже:
testlist = [1,2,3,5,3,1,2,1,6]
position=0
for i in testlist:
if i == 1:
print(position)
position=position+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, поэтому вам нужно создать один из них вместо списка.
Это вернет позицию как это:
('0',) (хотя более поздние версии Tkinter могут вместо этого возвращать список целых)
Который для первой позиции и номер будет меняться в зависимости от позиции элемента.
Для получения дополнительной информации см. Эту страницу: http://effbot.org/tkinterbook/listbox.htm
Приветствую.
Просто, чтобы проиллюстрировать полный пример вместе с input_list
которым есть searies1
(пример: input_list [0]), в котором вы хотите выполнить поиск series2
(пример: input_list [1]) и получить индексы серии2, если она существует в серии1.
Примечание: вы certain condition
будете идти в лямбда-выражении, если условия просты
input_list = [[1,2,3,4,5,6,7],[1,3,7]]
series1 = input_list[0]
series2 = input_list[1]
idx_list = list(map(lambda item: series1.index(item) if item in series1 else None, series2))
print(idx_list)
вывод:
[0, 2, 6]