Я перебираю список и хочу распечатать индекс элемента, если он удовлетворяет определенному условию. Как бы я это сделал?
Пример:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Хммм. Здесь был ответ с пониманием списка, но он исчез.
Вот:
[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'
Как насчет следующего?
Если вы не уверены, действительно ли искомый элемент находится в списке, вы можете добавить предварительную проверку, например:
или
или «питонический путь», который мне не очень нравится, потому что код менее понятен, но иногда более эффективен,
источник
ValueError
Используйте перечислять:
источник
xrange вместо диапазона, как требуется (см. комментарии).
источник
xrange
развращено в Python 3.x, так как новоеrange
- староеxrange
Вот еще один способ сделать это:
источник
источник
Попробуйте ниже:
источник
Если ваш список стал достаточно большим, и вы ожидали найти значение только в небольшом количестве индексов, учтите, что этот код может выполняться намного быстрее, поскольку вам не нужно повторять каждое значение в списке.
Если вы ожидаете много найти значение, вам, вероятно, следует просто добавить «индекс» в список и распечатать список в конце, чтобы сэкономить время на итерацию.
источник
Я думаю, что было бы полезно использовать метод curselection () из библиотеки Tkinter:
Этот метод работает с виджетами списка Tkinter, поэтому вам нужно создать один из них вместо списка.
Это вернет позицию как это:
('0',) (хотя более поздние версии Tkinter могут вместо этого возвращать список целых)
Который для первой позиции и номер будет меняться в зависимости от позиции элемента.
Для получения дополнительной информации см. Эту страницу: http://effbot.org/tkinterbook/listbox.htm
Приветствую.
источник
Зачем усложнять вещи?
источник
Просто, чтобы проиллюстрировать полный пример вместе с
input_list
которым естьsearies1
(пример: input_list [0]), в котором вы хотите выполнить поискseries2
(пример: input_list [1]) и получить индексы серии2, если она существует в серии1.Примечание: вы
certain condition
будете идти в лямбда-выражении, если условия простывывод:
источник
Я думаю, что это именно то, что вы хотите. ;-) 'id' всегда будет индексом значений в списке.
источник