이 목록이 항목을 찾을 색인입니다 redboot*용 파이썬

목록에 대해서는 ' [";;;; bar&quot foo&quot &quot &quot baz"]' 와 ',' 목록에 항목을 &quot bar&quot, 해당 인덱스 (1) 의 파이썬, 어떻게 해야 합니까?

질문에 대한 의견 (2)
해결책
>>> ["foo", "bar", "baz"].index("bar")
1

참조: [데이터 구조를 &gt. 자세한 내용은 열거합니다] (http://docs.python.org/2/tutorial/datastructures.html # 자세한 내용은 열거합니다)

따라와야지 시

단, 이는 아마 그 동안 깨끗한 방법을 묻는 질문에 대답 , 으로 '은' 목록 '대신' 인덱스화할 envision 있겠느뇨 apiu can& # 39, t, 쉐퍼드도 너희에게베풀어진 제가 마지막으로 사용된 그 정도다. 이 때문에 그동안 abc. 아웃하려면 it& # 39 의 내 의견이 크게 referenced 더욱 완벽한 답이 얻게된다면 이뤄져야 한다. 몇 가지 주의 사항 '대한' 리스트롬이네스 따라와야지! 그것은 아마도 처음에는 닥슬링 보면 그 가치가 있다.

>>> print(list.index.__doc__)
L.index(value, [start, [stop]]) -> integer -- return first index of value.
Raises ValueError if the value is not present.

선형 목록에서 시간 복잡도 길이

'인덱스' 는 모든 요소가 있는 호출하십시오 목록의 순서대로 발견할 때까지 a 매치. # 39, 긴 목록은 don& 모르는 경우, 당신은 이 검색 목록에서 이 병목 현상이 발생할 수 있는 대략 될 수 있다. 이 경우, 다른 데이터 구조를 고려해야 합니다. 참고로 알고 있다면 일치시킵니다 힌트를 찾을 수 있는 '약' 인덱스화할 지정할 수 있습니다. 예를 들어, '이 스니핏을 라자이네스 (, 999_990 999_999 1_000_000)' 가 큰 직선입니다 라자이네스 (999_999) ',' 보다 대략 5 명령이라구요 전 대뿐입니다 10 만, 후자는 검색 항목을 검색할 수 있기 때문이다.

>>> import timeit
>>> timeit.timeit('l.index(999_999)', setup='l = list(range(0, 1_000_000))', number=1000)
9.356267921015387
>>> timeit.timeit('l.index(999_999, 999_990, 1_000_000)', setup='l = list(range(0, 1_000_000))', number=1000)
0.0004404920036904514
  • * 를 인수 미디어만을 되돌려줍니다 색인입니다 첫 경기에서 있다.

전화를 통해 '검색' 인덱스화할 목록에 일치하는 경우, 그리고 정지점으로 할 수 있을 때까지 주문하십시오 aspt there. 지수, 더 많은 일치시킵니다 콩지름에 바뀌엇어요 번역 또는 발생기입니다 표현식입니다.

>>> [1, 1].index(1)
0
>>> [i for i, e in enumerate([1, 2, 1]) if e == 1]
[0, 2]
>>> g = (i for i, e in enumerate([1, 2, 1]) if e == 1)
>>> next(g)
0
>>> next(g)
2

내가 한 번 사용한 ',' 내가 지금 대부분의 위치에서 아니하였으매 인덱스화할 사용하여 표현할 수 있기 때문에, 또는 발생기입니다 표현식에서는 바뀌엇어요 they& # 39 더 일반화 나온다. 만일 you& # 39 에 이르는 점을 감안하면, 이러한 뛰어난 살펴보기 위한 ',' re 인덱스화할 파이썬 피쳐들입니다.

던지는 요소점 목록에 없는 경우

'인덱스' 결과 '에 대한 호출을 바루어로 item& # 39 의 경우' 없습니다.

>>> [1, 1].index(2)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: 2 is not in list

없을 경우 지정값이 목록의 항목 중 하나를 합니다

  1. 우선 '을 (를)' 항목은 확인할지 my_list (청소, 판독값 외곽진입) 또는
  2. 잡기 '에 해당하며' 블록 '바루어로 물릴 수 있는' 콜 '시도하시겠습니까 인덱스화할' (아마도 더 빠르고, 적어도 이 목록에 항목을 검색할 때 보통 길고, χ02.)
해설 (2)

정말 도움됐네 파이썬 함수를 사용할 수 있는 한 심아이엔큐 com/go/learn_fl_cs4_learningas2_kr 대화형 도움말에서는.

>>> help(["foo", "bar", "baz"])
Help on list object:

class list(object)
 ...

 |
 |  index(...)
 |      L.index(value, [start, [stop]]) -> integer -- return first index of value
 |

이를 위해 종종 무리는너희들이 방법을 찾고 있다.

해설 (1)

그러나 그들의 대부분은 설명하란말야 어떻게 답을 찾기 위해 여러 방법을 단일 인덱스화할 인덱스화합니다 목록에 항목이 여러 번 반환하지 않습니다. ['열거하십시오 ()'] 사용하여 (https://docs.python.org/3.6/library/functions.html # 열거하십시오):

for i, j in enumerate(['foo', 'bar', 'baz']):
    if j == 'bar':
        print(i)

'인덱스 ()' 이 처음 나타나는 반면, ' ()' 항목을 모두 되돌려줍니다 기능만 되돌려줍니다 열거하십시오.

목록으로 것이다.

[i for i, j in enumerate(['foo', 'bar', 'baz']) if j == 'bar']

39 의 또 다른 작은 솔루션을 통해 here& ['아르투르스트카운트 ()'] (http://docs.python.org/2/library/itertools.html # 아르투르스트카운트), 즉 거의 똑같은 외곽진입 tpc. 열거하십시오):

from itertools import izip as zip, count # izip for maximum efficiency
[i for i, j in zip(count(), ['foo', 'bar', 'baz']) if j == 'bar']

':' () 이 더 효율적으로 사용하는 것보다 더 큰 열거합니다 열거합니다.

$ python -m timeit -s "from itertools import izip as zip, count" "[i for i, j in zip(count(), ['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 174 usec per loop
$ python -m timeit "[i for i, j in enumerate(['foo', 'bar', 'baz']*500) if j == 'bar']"
10000 loops, best of 3: 196 usec per loop
해설 (3)

Indexe 모두 수행할 수 있습니다.

indexes = [i for i,x in enumerate(xs) if x == 'foo']
해설 (1)

'인덱스 ()' 첫 되돌려줍니다 색인입니다 가치! &gt. 인덱스 (.) &gt. L. 인덱스화할 (가치, [시작, [정지점을]]) - &gt. 정수 값을 먼저 반품하십시오 색인입니다 -

def all_indices(value, qlist):
    indices = []
    idx = -1
    while True:
        try:
            idx = qlist.index(value, idx+1)
            indices.append(idx)
        except ValueError:
            break
    return indices

all_indices("foo", ["foo","bar","baz","foo"])
해설 (3)

문제가 발생할 경우 요소점 목록에 없는 것이다. 이 함수는 이 문제를 다룬다.

# if element is found it returns index of element else returns None

def find_element_in_list(element, list_element):
    try:
        index_element = list_element.index(element)
        return index_element
    except ValueError:
        return None
해설 (0)
a = ["foo","bar","baz",'bar','any','much']

indexes = [index for index in range(len(a)) if a[index] == 'bar']
해설 (1)

당신은 조건을 설정할 수 있는지 확인하는 요소점 you& 목록에서 # 39 는 re 검색:.

if 'your_element' in mylist:
    print mylist.index('your_element')
else:
    print None
해설 (2)

하지만 이 모든 것을 재현하는 비헤이비어를 고유의 언어 기능을 잘 what& # 39, 상황을 잘.

[i for i in range(len(mylist)) if mylist[i]==myterm]  # get the indices

[each for each in mylist if each==myterm]             # get the items

mylist.index(myterm) if myterm in mylist else None    # get the first index and fail quietly

왜 예외 처리 함수를 작성할 경우 언어 자체를 할 수 있는 방법을 통해 그리웠댔지?

해설 (2)

누마피 스케쳐내 indexe 관심용 모두 사용할 수 있습니다.

import numpy as np

array = [1, 2, 1, 3, 4, 5, 1]
item = 1
np_array = np.array(array)
item_index = np.where(np_array==item)
print item_index
# Out: (array([0, 2, 6], dtype=int64),)

분명한 것은, 읽을 수 있는 솔루션이다.

해설 (2)

항목을 찾을 때 그 파이썬 redboot*용 바뀌엇어요 색인입니다 &gt.

&gt. 목록에 대해서는 ' [";;;; bar&quot foo&quot &quot &quot baz"]' 와 ',' 목록에 항목을 &quot, 이 방법은 깨끗한 bar&quot what& # 39 의 해당 인덱스 (1) 의 파이썬?

뭐, 물론 there& # 39 의 인덱스 메서드는 되돌려줍니다 색인입니다 처음에는:

>>> l = ["foo", "bar", "baz"]
>>> l.index('bar')
1

몇 가지 문제가 이 방법:

39, t 값이 - isn& you& ll get a ',' 바루어로 목록에서 # 39

  • 이 중 하나 이상의 가치가 있는 경우에만 인덱스화할 내려받습니다 대한 첫 번째 목록에서

값이 없습니다

값이 누각되었습니다 바루어로 '강한' 할 수 있다.

이 같은 재사용 가능한 정의마다 함께 할 수 있습니다.

def index(a_list, value):
    try:
        return a_list.index(value)
    except ValueError:
        return None

그리고 이를 사용하여 다음과 같습니다.

>>> print(index(l, 'quux'))
None
>>> print(index(l, 'bar'))
1

그리고 이것은 경우 값을 가질 수 있는 문제 가능성이 높다 '는' 없음 '또는' 확인할지 반환되었습니다 아니다.

result = index(a_list, value)
if result is not None:
    do_something(result)

목록에서 두 개 이상의 값을

, # 39 번, you& 외상때문에 경우 더 많은 정보를 얻을 수 있는 것은 'll 완료하십시오 리스트롬이네스':

>>> l.append('bar')
>>> l
['foo', 'bar', 'baz', 'bar']
>>> l.index('bar')              # nothing at index 3?
1

로 표현할 수 있는 이 열거하십시오 바뀌엇어요 indexe:

>>> [index for index, v in enumerate(l) if v == 'bar']
[1, 3]
>>> [index for index, v in enumerate(l) if v == 'boink']
[]

없으면 그 결과의 발생을 통해 확인할 수 있습니다 확인란 부울을 가공할지 아무 일도 하지 않을 경우 다음과 같은 결과를 통해 루프

indexes = [index for index, v in enumerate(l) if v == 'boink']
for index in indexes:
    do_something(index)

나으뇨 data 문깅 함께 판다

이 정보를 얻을 수 있는 경우, 당신은 시리즈를 내놓아 객체에는 판다.

>>> import pandas as pd
>>> series = pd.Series(l)
>>> series
0    foo
1    bar
2    baz
3    bar
dtype: object

비교 확인란 반환되므로 일련의 불 (bool) 값들:

>>> series == 'bar'
0    False
1     True
2    False
3     True
dtype: bool

이 시리즈를 통해 전달하고 불 (bool) 값들 아래 첨자 표기법 및 확보하십시오 그냥 시리즈 일치하는 구성원:

>>> series[series == 'bar']
1    bar
3    bar
dtype: object

단순히 인덱스, 인덱스화할 되돌려줍니다 스케쳐내 속성용 일련의 정수.

>>> series[series == 'bar'].index
Int64Index([1, 3], dtype='int64')

그리고 그, 그냥 지나칠 수 있는 스케쳐내 목록이거나 튜플 이를 구성자를:

>>> list(series[series == 'bar'].index)
[1, 3]

예, 바뀌엇어요 표현할 수 있지만, 함께 사용할 수 있습니다 # 39 의 그냥 너무 열거하십시오 that& 아니라 세련된 내 의견으로는 you& 대한 테스트를 하고, re - # 39 에서 작성한 코드를 C 파이썬 대신 평등이 감당할 수 있도록 기본 제공:

>>> [i for i, value in enumerate(l) if value == 'bar']
[1, 3]

로만스였나 ui_policytable_java_spe_policy XY 문제?

&gt. Xy 묻는 문제가 아닌 실제 문제에 대한 해결 했습니다.

Do you think you 할 때 왜 인덱스화할 요소에 바뀌엇어요?

이미 알고 있는 경우, 왜 신경습니까 목록에 가치를 어디에?

39, t ',' 이 인기를 끌고 있을 경우 verbose 값이 isn& 바루어로 포지셔닝하십시오 오히려 - 아마 그런 상황을 피하기 위한.

어쨌든 그래서 I& # 39 위에 반복 # 39 m, 일반적으로 i& 목록, ll 일반적으로 렉시한테서 포인터입니다 재밌는 정보를 가져오는 인덱스화할 함께 열거하십시오.

39, re 문깅 you& 경우 데이터를 사용하는 것보다 훨씬 더 세련된 툴과도 합니다 - 아마도 판다 디스크입니다. diskid I& 순결케 파이썬 해결 방법 # 39, ve 표시됩니다.

내가 필요로 하는 ',' 리스트롬이네스 재호출 있어요. 그러나 나는, 내가 보고 생각하고 파이썬 표준 라이브러리를 통해 일부 뛰어난 사용할 수 있습니다.

이에 대한 여러 가지 많은 /dev/raw/raw1 이들리브 ',' GUI 및 텍스트 구문 분석.

이를 이용하여 찾을 수 있는 '키워드' 모듈에서는 셀명 표시자는 모듈에서는 목록을 통해 자동으로 재생성합니다 여러_키워드 항목이없습니다 메타프로그래밍.

마치 순서화된 매핑에서는 Lib/mailbox.py 사용할 수 있는 것으로 보인다.

key_list[key_list.index(old)] = new

del key_list[key_list.index(key)]

다음 달 수 있는 Lib/http/cookiejar.py 사용될 것으로 보인다.

mon = MONTHS_LOWER.index(mon.lower())+1

비슷한 Lib/tarfile.py 디스튜티우스 얻을 수 있는 최대 슬라이스에 항목:

members = members[:members.index(tarinfo)]

의 Lib/pickletools.py:

numtopop = before.index(markobject)

이러한 것은 마치 어떤 용도를 가진 공통점이란거지 작업할 수 없는 것 같아 제한적인 열거합니다 크기 ('O (n) 의 중요한 이유는 리스트롬이네스 조회 시간에 대해') 및 they& # 39, re 구문 분석 (및 UI 의 경우 유휴) 에서 주로 사용된다.

이를 위해 사용 가지가 있을 수 있지만, 이들은 상당히 아니었다. 답을 찾을 수 있다면, 이 경우, 어떤 일을 찾고 교도관님도요 하나님께용서를 교도관님도요 you& # 39 는 re 가장 직접적인 제공하는 툴을 사용 언어 단축시킵니다 활용.

해설 (0)

모든 indexe 를 ['zip'] [1] 기능:

get_indexes = lambda x, xs: [i for (y, i) in zip(xs, range(len(xs))) if x == y]

print get_indexes(2, [1, 2, 3, 4, 5, 6, 3, 2, 3, 2])
print get_indexes('f', 'xsfhhttytffsafweef')

[1]: https://docs.python.org/2/library/functions.html # zip

해설 (1)

모두 가져오는 발생 및 하나 이상의 포지셔닝하십시오 목록의 항목 (동일)

첫 번째 요소 (n) 를 저장할 수 있는 열거하십시오 (alist 를) 는 색인입니다 때 is equal to look for x 너희는너희가 요소 목록.

>>> alist = ['foo', 'spam', 'egg', 'foo']
>>> foo_indexes = [n for n,x in enumerate(alist) if x=='foo']
>>> foo_indexes
[0, 3]
>>>

# 39 의 밝힐 핀디네스 Let& 함수

이 함수의 인수로 는 항목 및 목록 및 반품하십시오 목록에서 전에 같은 항목의 포지셔닝하십시오 보았습니다.

def indexlist(item2find, list_or_string):
  "Returns all indexes of an item in a list or a string"
  return [n for n,item in enumerate(list_or_string) if item==item2find]

print(indexlist("1", "010101010"))
  • 출력입니다 *
[1, 3, 5, 7]

&lt h2&gt Simple&lt /h2>;;;

for n, i in enumerate([1, 2, 3, 4, 1]):
    if i == 1:
        print(n)

출력:

0
4
해설 (1)

또 다른 옵션은

>>> a = ['red', 'blue', 'green', 'red']
>>> b = 'red'
>>> offset = 0;
>>> indices = list()
>>> for i in range(a.count(b)):
...     indices.append(a.index(b,offset))
...     offset = indices[-1]+1
... 
>>> indices
[0, 3]
>>> 
해설 (1)

단순히 함께 사용할 수 있습니다.

a = [['hand', 'head'], ['phone', 'wallet'], ['lost', 'stock']]
b = ['phone', 'lost']

res = [[x[0] for x in a].index(y) for y in b]
해설 (0)

h1&gt 불신함은 &lt, 지금은 완전히 다른 일을. &lt /h1>; . 전에 같은 존재를 확증하 품목으로부터 가져오는 색인입니다. 이 방식은 지수 함수에 대해서 항상 착한 사람이 있어도 - 목록을 되돌려줍니다 빈 목록. 작동하잖아 문장열 함께 잘 알려져 있다.

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    retval = []
    last = 0
    while val in l[last:]:
            i = l[last:].index(val)
            retval.append(last + i)
            last += i + 1   
    return retval

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

붙여넣어집니다 때 상호대화식 파이썬 창:

Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(the_list, val):
...     """Always returns a list containing the indices of val in the_list"""
...     retval = []
...     last = 0
...     while val in the_list[last:]:
...             i = the_list[last:].index(val)
...             retval.append(last + i)
...             last += i + 1   
...     return retval
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

업데이트

39 억 년 후, 다른 헤드 다운 파이썬 개발, I& 조금 부끄러운 기록을 통해 사용할 수 있도록 한 것은, 내 원래 오토메이티드 설정되었습니다 직선 위의 코드는 수 있습니다. 그러나 사용하는 것이 훨씬 더 성어는 같은 비헤이비어는 표현할 방법은 열거하십시오 함께 목록 () 함수.

이 같은 일이.

def indices(l, val):
    """Always returns a list containing the indices of val in the_list"""
    return [index for index, value in enumerate(l) if value == val]

l = ['bar','foo','bar','baz','bar','bar']
q = 'bar'
print indices(l,q)
print indices(l,'bat')
print indices('abcdaababb','a')

이 때, 붙여넣어집니다 상호대화식 파이썬 창 익올때:

Python 2.7.14 |Anaconda, Inc.| (default, Dec  7 2017, 11:07:58) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def indices(l, val):
...     """Always returns a list containing the indices of val in the_list"""
...     return [index for index, value in enumerate(l) if value == val]
... 
>>> l = ['bar','foo','bar','baz','bar','bar']
>>> q = 'bar'
>>> print indices(l,q)
[0, 2, 4, 5]
>>> print indices(l,'bat')
[]
>>> print indices('abcdaababb','a')
[0, 4, 5, 7]
>>> 

자, 이제 이 질문과 답변을 검토한 뒤, 이것이 정확히 내가 모든 것을 자신의 제안됩니다 어떤 FMc [이전 오토메이티드] [2]. 당시 나는 내가 처음 이 질문에 답을 볼 수 있는 , t # 39 답변됨 didn&, 내가 didn& # 39, t 이해해야 한다. 예를 들어 다소 도움이 될 내 상세한 이해를 바란다.

T , # 39 위에 한 줄의 코드를 경우 여전히 doesn& 너회가 구글 & # 39, 파이썬, 내가 말이 돼 매우 추천합니까 comprehension& 나열하십시오 # 39. 몇 분 정도 걸리며 숙지합니다. # 39 의 it& 중 하나만 많은 파이썬 코드를 사용할 수 있도록 강력한 기능을 개발할 수 있는 기쁨을.

[2]: # 17300987 https://stackoverflow.com/questions/176918/finding-the-index-of-an-item-given-a-list-containing-it-in-python/17300987

해설 (0)

변형 및 user7177 답을 한 수 있는 FMc 의 경우 모든 지수 엔트리여야 복귀하십시오 부여하느뇨 딕트:

>>> a = ['foo','bar','baz','bar','any', 'foo', 'much']
>>> l = dict(zip(set(a), map(lambda y: [i for i,z in enumerate(a) if z is y ], set(a))))
>>> l['foo']
[0, 5]
>>> l ['much']
[6]
>>> l
{'baz': [2], 'foo': [0, 5], 'bar': [1, 3], 'any': [4], 'much': [6]}
>>> 

1 이 liner 를 사용할 수도 있습니다 단일 항목을 지수 모두 수행할 수 있습니다. 하지만, 제가 보장은 없다고 효율성을 위해 사용 횟수를 줄일 수 있도록 한 세트 () 는 람다 (λ) 입니다.

해설 (1)

이 솔루션은 아닌 다른 강력하다 "에 대한 're a beginner 유일한 신앙이니라 you& # 39, 루프 it& # 39 에 대해 알고 여전히 항목을 찾을 수 있는 첫 번째 색인입니다 피하면서 바루어로:

def find_element(p,t):
    i = 0
    for e in p:
        if e == t:
            return i
        else:
            i +=1
    return -1
해설 (0)

목록의 항목 x 발견사항 색인입니다 L:

idx = L.index(x) if (x in L) else -1
해설 (2)
name ="bar"
list = [["foo", 1], ["bar", 2], ["baz", 3]]
new_list=[]
for item in list:
    new_list.append(item[0])
print(new_list)
try:
    location= new_list.index(name)
except:
    location=-1
print (location)

만일 이 계정 문자열을 목록에 없는 경우, 그 위치를 목록에서 # 39 너무 isn& t = - 1

해설 (0)