답변:
흠. 여기에 목록 이해력이있는 대답이 있었지만 사라졌습니다.
여기:
[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을 쓰는 데 사용했다고 생각합니다.
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
새로운 같이, 파이썬 3.x를에 depracted되어 range
이전이다xrange
[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
값을 많이 찾으려면 목록에 "인덱스"를 추가하고 마지막에 목록을 인쇄하여 반복 당 시간을 절약해야합니다.
Tkinter 라이브러리의 curselection () 메소드를 사용하는 것이 유용 할 수 있다고 생각합니다.
from Tkinter import *
listbox.curselection()
이 방법은 Tkinter 목록 상자 위젯에서 작동하므로 목록 대신 위젯 중 하나를 구성해야합니다.
이것은 다음과 같은 위치를 반환합니다 :
( '0',) (Tkinter의 이후 버전은 대신 int 목록을 반환 할 수 있지만)
어느 것이 첫 번째 위치이며 항목 위치에 따라 번호가 변경됩니다.
자세한 내용은 다음 페이지를 참조하십시오. http://effbot.org/tkinterbook/listbox.htm
인사말.
그냥과 함께 완전한 예를 설명하기 위해 input_list
이있다 searies1
(예 : input_list를 [0]) 당신의 검색을 수행하고자하는 series2
(예 : input_list [1])하고 시리즈 1에있는 경우 시리즈 2의 인덱스를 얻을.
참고 : 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]