Iteruję po liście i chcę wydrukować indeks elementu, jeśli spełnia określony warunek. Jak bym to zrobił?
Przykład:
testlist = [1,2,3,5,3,1,2,1,6]
for item in testlist:
if item == 1:
print position
Hmmm. Była tu odpowiedź ze zrozumieniem listy, ale zniknęła.
Tutaj:
[i for i,x in enumerate(testlist) if x == 1]
Przykład:
>>> testlist
[1, 2, 3, 5, 3, 1, 2, 1, 6]
>>> [i for i,x in enumerate(testlist) if x == 1]
[0, 5, 7]
Aktualizacja:
OK, potrzebujesz wyrażenia generatora, będziemy mieć wyrażenie generatora. Oto ponownie rozumienie listy, w pętli for:
>>> for i in [i for i,x in enumerate(testlist) if x == 1]:
... print i
...
0
5
7
Teraz skonstruujemy generator ...
>>> (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
i dość sprytnie, możemy przypisać to do zmiennej i używać jej stamtąd ...
>>> gen = (i for i,x in enumerate(testlist) if x == 1)
>>> for i in gen: print i
...
0
5
7
I pomyśleć, że pisałem FORTRAN.
args = ['x', '-p1', 'v1', '-p2', 'v2']
. Następnie polecenieargs[[i for i, x in enumerate(args) if x == '-p1'][0] + 1]
powraca'v1'
A co z następującymi?
Jeśli nie jesteś pewien, czy element, którego szukasz, faktycznie znajduje się na liście, możesz dodać wstępne sprawdzenie, na przykład
lub
lub „sposób pythonowy”, którego nie lubię tak bardzo, ponieważ kod jest mniej przejrzysty, ale czasami jest bardziej wydajny,
źródło
ValueError
Użyj wyliczenia:
źródło
xrange zamiast zakresu zgodnie z żądaniem (patrz komentarze).
źródło
xrange
jest dezaktywowany w Pythonie 3.x, ponieważ nowyrange
jest staryxrange
Oto inny sposób, aby to zrobić:
źródło
źródło
Wypróbuj poniższe:
źródło
Jeśli twoja lista jest wystarczająco duża i spodziewałeś się znaleźć wartość tylko w rzadkiej liczbie indeksów, weź pod uwagę, że ten kod może działać znacznie szybciej, ponieważ nie musisz iterować każdej wartości na liście.
Jeśli spodziewasz się, że znajdziesz dużo wartości, prawdopodobnie powinieneś po prostu dodać „index” do listy i wydrukować listę na końcu, aby zaoszczędzić czas na iterację.
źródło
Myślę, że przydałoby się użycie metody curselection () z biblioteki Tkinter:
Ta metoda działa na widżetach listbox Tkinter, więc musisz utworzyć jeden z nich zamiast listy.
Spowoduje to zwrócenie takiej pozycji:
('0',) (chociaż późniejsze wersje Tkintera mogą zamiast tego zwracać listę int)
Która dotyczy pierwszej pozycji, a liczba będzie się zmieniać w zależności od pozycji pozycji.
Więcej informacji można znaleźć na tej stronie: http://effbot.org/tkinterbook/listbox.htm
Pozdrowienia.
źródło
Po co komplikować sprawy?
źródło
Aby zilustrować kompletny przykład wraz z tym,
input_list
który masearies1
(przykład: lista_wejściowa [0]), w którym chceszseries2
wyszukać (przykład: lista_wejściowa [1]) i uzyskać indeksy serii2, jeśli istnieje w serii1.Uwaga: Twoja
certain condition
wola zostanie wyrażona w wyrażeniu lambda, jeśli warunki są prostewynik:
źródło
Myślę, że dokładnie tego chcesz. ;-) 'id' będzie zawsze indeksem wartości na liście.
źródło