Python: 목록에서 요소 찾기
Python 목록에서 요소의 인덱스를 찾는 좋은 방법은 무엇입니까?
목록이 정렬되지 않을 수 있습니다.
사용할 비교 연산자를 지정할 수 있는 방법이 있습니까?
Python에 대한 상세 정보:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li.index("example")
5
요소가 목록에 포함되어 있는지 확인하는 경우:
>>> li
['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> 'example' in li
True
>>> 'damn' in li
False
가장 좋은 방법은 목록 메서드 .index를 사용하는 것입니다.
목록의 개체에 대해 다음과 같은 작업을 수행할 수 있습니다.
def __eq__(self, other):
return self.Value == other.Value
특별한 처리를 할 수 있습니다.
enumerate(arr)와 함께 for/in 문을 사용할 수도 있습니다.
값이 100보다 큰 항목의 인덱스를 찾는 예.
for index, item in enumerate(arr):
if item > 100:
return index, item
목록 이해를 사용하는 다른 방법이 있습니다(일부 사용자는 이 방법을 논쟁할 수 있습니다).간단한 테스트(예: 객체 속성 비교)에서는 매우 접근하기 쉽습니다(매우 필요).
el = [x for x in mylist if x.attr == "foo"][0]
물론 이는 목록에 적합한 요소의 존재(및 실제로 고유성)를 가정합니다.
numpy 배열에서 값을 찾으려면 다음과 같은 방법이 필요합니다.
Numpy.where(arr=="value")[0]
이 있습니다.index
방법,i = array.index(value)
단, 커스텀 비교 연산자는 지정할 수 없다고 생각합니다.다만, 자신의 함수를 작성하는 것은 어렵지 않습니다.
def custom_index(array, compare_function):
for i, v in enumerate(array):
if compare_function(v):
return i
일치하는 요소의 인덱스를 반환하는 함수(Python 2.6):
def index(l, f):
return next((i for i in xrange(len(l)) if f(l[i])), None)
그런 다음, 예를 들어 요소 이름을 사용하여 필요한 방정식으로 필요한 요소를 검색하기 위해 람다 함수를 통해 사용합니다.
element = mylist[index(mylist, lambda item: item["name"] == "my name")]
코드의 여러 곳에서 사용할 필요가 있는 경우 특정 찾기 기능을 정의하기만 하면 됩니다. 예를 들어 이름으로 요소를 찾을 수 있습니다.
def find_name(l, name):
return l[index(l, lambda item: item["name"] == name)]
그리고 그것은 꽤 쉽고 읽기 쉽다.
element = find_name(mylist,"my name")
목록의 색인 방법을 사용하면 이 작업을 수행할 수 있습니다.주문을 보장하려면 먼저 다음 명령을 사용하여 목록을 정렬하십시오.sorted()
. Sorted는 정렬 방법을 지시하는 cmp 또는 키 파라미터를 받아들입니다.
a = [5, 4, 3]
print sorted(a).index(5)
또는 다음 중 하나를 선택합니다.
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
이건 어때?
def global_index(lst, test):
return ( pair[0] for pair in zip(range(len(lst)), lst) if test(pair[1]) )
사용방법:
>>> global_index([1, 2, 3, 4, 5, 6], lambda x: x>3)
<generator object <genexpr> at ...>
>>> list(_)
[3, 4, 5]
나는 이것을 몇몇 튜토들을 개작해서 알아냈다.google, 그리고 여러분 덕분입니다.
def findall(L, test):
i=0
indices = []
while(True):
try:
# next value in list passing the test
nextvalue = filter(test, L[i:])[0]
# add index of this value in the index list,
# by searching the value in L[i:]
indices.append(L.index(nextvalue, i))
# iterate i, that is the next index from where to search
i=indices[-1]+1
#when there is no further "good value", filter returns [],
# hence there is an out of range exeption
except IndexError:
return indices
매우 간단한 사용:
a = [0,0,2,1]
ind = findall(a, lambda x:x>0))
[2, 3]
추신 내 영어를 연습해라.
언급URL : https://stackoverflow.com/questions/604802/python-finding-an-element-in-a-list
'programing' 카테고리의 다른 글
Larabel Alturnal의 "With()" 함수를 사용하여 특정 열 가져오기 (0) | 2022.09.19 |
---|---|
MYSQL_ROOT_PASSWORD 환경변수가 mariadb 컨테이너에 설정되어 있지 않다. (0) | 2022.09.19 |
MySQL: 사용자가 존재하는지 확인한 후 삭제 (0) | 2022.09.19 |
Vuetify 탐색 드로어 v-modeled to Vuex (0) | 2022.09.19 |
MySQL에서 데이터베이스를 드롭하면 "Error droping database errno: 66"이 반환됩니다. (0) | 2022.09.19 |