[python] 목록에서 아이템의 위치를 ​​얻는 방법?

목록을 반복하고 특정 조건을 충족하면 항목의 색인을 인쇄하고 싶습니다. 어떻게해야합니까?

예:

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

그리고 내가 FORTRAN을 쓰는 데 사용했다고 생각합니다.


답변

다음은 어떻습니까?

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


답변

열거 형 사용 :

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


답변

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

요청 된 범위 대신 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