목록에서 항목의 위치를 가져오는 방법은 무엇입니까?
저는 목록을 반복하고 있는데, 어떤 조건에 부합하면 그 항목의 색인을 출력하고 싶습니다.어떻게 해야 하나요?
예:
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
'programing' 카테고리의 다른 글
Azure SDK 2.5.1이 cloudService를 게시하지 못함 (0) | 2023.05.18 |
---|---|
UNit TestCase의 매개 변수로 에서 큰따옴표를 피하는 방법은 무엇입니까? (0) | 2023.05.18 |
postgresql로 변수 값 인쇄 (0) | 2023.05.18 |
.NET에서 내부 XAML 파일 만들기 (0) | 2023.05.18 |
작업자 스레드를 통해 관찰 가능한 컬렉션을 업데이트하려면 어떻게 해야 합니까? (0) | 2023.05.18 |