Programing

배열에 요소가 있는지 확인하십시오.

lottogame 2020. 12. 3. 07:21
반응형

배열에 요소가 있는지 확인하십시오.


PHP에는 isset()무언가 (배열 인덱스와 같은)가 존재하고 값이 있는지 확인하기 위해 호출되는 함수 가 있습니다. 파이썬은 어떻습니까?

가끔 "IndexError : list index out of range"가 발생하기 때문에 배열에 이것을 사용해야합니다.

내가 추측 할 수 시도 / 잡기를 사용하지만, 그 최후의 수단이다.


도약하기 전에보세요 ( LBYL ) :

if idx < len(array):
    array[idx]
else:
    # handle this

허가보다 용서를 구하는 것이 더 쉬움 ( EAFP ) :

try:
    array[idx]
except IndexError:
    # handle this

Python에서 EAFP는 일반적으로 더 신뢰할 수 있기 때문에 인기 있고 선호되는 스타일 인 것 같습니다. 따라서 다른 모든 것들이 동일하므로이 사용 사례에서 try/ except버전을 사용 하는 것이 좋습니다 . "마지막 수단"으로 보지 마십시오.

이 발췌문은 위에 링크 된 공식 문서에서 발췌 한 것으로, 흐름 제어를 제외하고 try / except 사용을 보증합니다.

이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성의 존재를 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깔끔하고 빠른 스타일은 많은 try and except 서술문이 있다는 특징이 있습니다.


EAFP 대 LBYL

나는 당신의 딜레마를 이해하지만, 파이썬은 PHP와로 알려진 코딩 스타일하지 않습니다 권한보다 용서를 요청하기 쉽게 (또는 EAFP 짧은)는 파이썬에서 일반적인 코딩 스타일 .

소스를 참조하십시오 ( 문서에서 ) :

EAFP- 허가보다 용서를 구하기가 더 쉽습니다. 이 일반적인 Python 코딩 스타일은 유효한 키 또는 속성의 존재를 가정하고 가정이 거짓으로 판명되면 예외를 포착합니다. 이 깔끔하고 빠른 스타일은 많은 try and except 서술문이 있다는 특징이 있습니다. 이 기술은 C와 같은 다른 많은 언어에 공통적 인 LBYL 스타일과 대조됩니다.

따라서 기본적으로 여기에서 try-catch 문을 사용하는 것은 최후의 수단이 아닙니다. 그것은 일반적인 관행 입니다.

Python의 "배열"

PHP에는 연관 및 비 연관 배열이 있으며 Python에는 목록, 튜플 및 사전이 있습니다. 목록은 비 연관 PHP 배열과 유사하며 사전은 연관 PHP 배열과 유사합니다.

"키"가 "배열"에 있는지 확인하려면 먼저 "키"가 없을 때 다른 오류를 던지기 때문에 파이썬에서 어떤 유형인지 먼저 알려야합니다.

>>> l = [1,2,3]
>>> l[4]

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    l[4]
IndexError: list index out of range
>>> d = {0: '1', 1: '2', 2: '3'}
>>> d[4]

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    d[4]
KeyError: 4

그리고 EAFP 코딩 스타일을 사용하는 경우 이러한 오류를 적절히 포착해야합니다.

LBYL 코딩 스타일-인덱스의 존재 확인

LBYL 접근 방식을 고집한다면 다음과 같은 솔루션이 있습니다.

  • 목록의 경우 길이를 확인 possible_index < len(your_list)하고이면 your_list[possible_index]존재하고 그렇지 않으면 그렇지 않습니다.

    >>> your_list = [0, 1, 2, 3]
    >>> 1 < len(your_list) # index exist
    True
    >>> 4 < len(your_list) # index does not exist
    False
    
  • 사전에 대한 당신이 사용할 수있는 in키워드와 경우 possible_index in your_dict, 다음 your_dict[possible_index]그렇지 않으면하지 않는, 존재 :

    >>> your_dict = {0: 0, 1: 1, 2: 2, 3: 3}
    >>> 1 in your_dict # index exists
    True
    >>> 4 in your_dict # index does not exist
    False
    

도움이 되었나요?


`e` in ['a', 'b', 'c']  # evaluates as False
`b` in ['a', 'b', 'c']  # evaluates as True

편집 : 설명과 함께 새로운 답변 :

Note that PHP arrays are vastly different from Python's, combining arrays and dicts into one confused structure. Python arrays always have indices from 0 to len(arr) - 1, so you can check whether your index is in that range. try/catch is a good way to do it pythonically, though.

If you're asking about the hash functionality of PHP "arrays" (Python's dict), then my previous answer still kind of stands:

`baz` in {'foo': 17, 'bar': 19}  # evaluates as False
`foo` in {'foo': 17, 'bar': 19}  # evaluates as True

has_key is fast and efficient.

Instead of array use an hash:

valueTo1={"a","b","c"}

if valueTo1.has_key("a"):
        print "Found key in dictionary"

You may be able to use the built-in function dir() to produce similar behavior to PHP's isset(), something like:

if 'foo' in dir():  # returns False, foo is not defined yet.
    pass

foo = 'b'

if 'foo' in dir():  # returns True, foo is now defined and in scope.
   pass

dir() returns a list of the names in the current scope, more information can be found here: http://docs.python.org/library/functions.html#dir.

참고URL : https://stackoverflow.com/questions/8570606/check-element-exists-in-array

반응형