programing

목록에서 항목의 위치를 가져오는 방법은 무엇입니까?

cafebook 2023. 5. 18. 23:41
반응형

목록에서 항목의 위치를 가져오는 방법은 무엇입니까?

저는 목록을 반복하고 있는데, 어떤 조건에 부합하면 그 항목의 색인을 출력하고 싶습니다.어떻게 해야 하나요?

예:

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

제가 포트란을 썼다고 생각하니깐요

다음은 어떻습니까?

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"

다음을 시도해 보십시오.

testlist = [1,2,3,5,3,1,2,1,6]    
position=0
for i in testlist:
   if i == 1:
      print(position)
   position=position+1
[x for x in range(len(testlist)) if testlist[x]==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

값을 많이 찾으려면 목록에 "인덱스"를 추가하고 마지막에 목록을 인쇄하여 반복당 시간을 절약해야 합니다.

저는 thte Tkinter 라이브러리의 저주 선택() 방법을 사용하는 것이 유용할 수 있다고 생각합니다.

from Tkinter import * 
listbox.curselection()

이 방법은 Tkinterlistbox 위젯에서 작동하므로 목록 대신 그 중 하나를 구성해야 합니다.

그러면 다음과 같은 위치가 반환됩니다.

('0',) (이후 버전의 Tkinter는 int 목록을 대신 반환할 수 있습니다.)

이것은 첫 번째 위치를 위한 것이고, 번호는 항목 위치에 따라 변경됩니다.

자세한 내용은 다음 페이지를 참조하십시오. http://effbot.org/tkinterbook/listbox.htm

인사말.

왜 일을 복잡하게 만드나요?

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

전체 예를 설명하기 위해 다음과 같이 설명합니다.input_list가 있는searies1(volume: input_list[0])를 검색합니다.series2(syslog: input_list[1])를 입력하고 series1에 있는 경우 series2의 인덱스를 가져옵니다.

참고: 사용자의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]
l = list(map(int,input().split(",")))
num = int(input())
for i in range(len(l)):
    if l[i] == num:
        print(i)

설명:

1행에서 정수 "l"(쉼표로 구분)의 목록을 작성했습니다.2행에서 정수 "숫자"를 사용했습니다.3행의 루프에 사용되어 목록 내부를 통과하고 (목록의) 숫자가 지정된 숫자(숫자)를 충족하는지 확인한 다음 목록 내부의 숫자 색인을 인쇄합니다.

testlist = [1,2,3,5,3,1,2,1,6]
num = 1
for item in range(len(testlist)):
    if testlist[item] == num:
        print(item) 
testlist = [1,2,3,5,3,1,2,1,6]
for id, value in enumerate(testlist):
    if id == 1:
        print testlist[id]

당신이 원하는 것이 바로 그것이라고 생각합니다. ;-) 'id'는 항상 목록의 값의 색인이 될 것입니다.

언급URL : https://stackoverflow.com/questions/364621/how-to-get-items-position-in-a-list

반응형